You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash脚本中执行字符串形式的Swift脚本并获取结果?

如何在Bash中直接执行字符串形式的Swift脚本

问题出在哪?

你原来的写法把Swift脚本内容当成了swift命令的文件名参数,但swift默认是要加载脚本文件的,它会尝试去找名为import的文件(就是你脚本的第一个单词),自然找不到,所以才报了那个奇怪的子命令错误。

正确的实现方式

我们可以通过标准输入把脚本内容传给swift,这样完全不需要创建临时文件,给你几种实用的写法:

1. 用Here-String(最推荐,可读性强)

Bash的Here-String可以轻松传递多行字符串,再加上--标记明确区分脚本参数和swift自身的参数:

# 把你的Swift脚本存在环境变量里
APP="import Foundation
let path = CommandLine.arguments[1]
print(path)"

# 执行脚本,同时传递路径参数
xcrun swift -- /path/path2/path3/path4 <<< "$APP"

这里的--一定要加,它告诉swift:后面的/path/...是你的Swift脚本要接收的参数,不是swift命令的参数,避免搞混。

2. 用管道配合echo

如果你习惯管道语法,也可以这样写:

APP="import Foundation
let path = CommandLine.arguments[1]
print(path)"

echo "$APP" | xcrun swift -- /path/path2/path3/path4

效果和上面完全一样,只是传递方式不同。

3. 单行短脚本用-e参数

如果你的Swift脚本是单行的,直接用swift的-e参数执行表达式更简洁:

xcrun swift -e 'import Foundation; let path = CommandLine.arguments[1]; print(path)' -- /path/path2/path3/path4

多行脚本用这种方式需要用分号分隔语句,可读性不如前两种,适合简单逻辑。

测试一下

执行上面的命令后,你应该能看到输出:

/path/path2/path3/path4

内容的提问来源于stack exchange,提问作者Andrew Romanov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:13:34