如何为osascript传递多个参数?解决仅输出前两参数的问题
解决osascript Shell脚本只能打印前两个参数的问题
我来帮你搞定这个问题!你遇到的情况是因为原来的osascript代码只显式处理了前两个参数,而且没考虑无参数的场景。咱们可以通过调整参数传递方式+osascript的循环逻辑,轻松实现支持不限数量参数,同时无参数时也不会报错。
方案一:遍历所有参数逐个打印(推荐)
直接用Here Document写法写osascript代码,配合循环遍历所有参数,同时加入无参数判断:
#!/bin/bash osascript <<EOF on run argv -- 无参数时输出提示,避免报错 if length of argv is 0 then log "没有传入任何参数哦~" else -- 循环遍历所有参数并打印 repeat with arg in argv log arg end repeat end if end run EOF "$@"
关键说明:
<<EOF是Shell的Here Document语法,比一堆-e参数更清晰,方便写多行osascript逻辑;argv是osascript接收的参数列表,用repeat with arg in argv可以遍历每一个传入的参数,不管数量多少都能处理;- 加入
length of argv is 0的判断,无参数时输出友好提示,不会触发“索引越界”类的错误; - 最后用
"$@"把Shell脚本接收的所有参数完整传递给osascript,引号绝对不能丢,否则带空格的参数会被错误拆分。
方案二:直接输出所有参数为字符串
如果不需要逐个参数换行打印,也可以把参数列表直接转成字符串输出,写法更简洁:
#!/bin/bash osascript <<EOF on run argv if length of argv is 0 then log "无参数传入" else -- 把参数列表转成空格分隔的字符串打印 log argv as string end if end run EOF "$@"
比如执行./test.sh foo bar buzz,会输出foo bar buzz。
测试一下:
- 无参数执行
./test.sh,会输出提示信息,不会报错; - 传任意数量参数(包括带空格的,比如
./test.sh "hello world" foo bar),都能正确处理。
内容的提问来源于stack exchange,提问作者kenorb
相关产品推荐
相关产品推荐

