Bash:将变量作为单个参数/shell 引用参数传递

标签 bash python-2.7 quotes

我正在编写一个 bash 脚本,它必须将一个变量传递给另一个程序:

./program $variable

问题是,将 $variable 作为单个参数传递是绝对必要的,如果它包含空格,则情况并非如此。
variable=Hello World
./program $variable
-> program receives two arguments: 'Hello' 'World'

引用它根本没有任何作用(做得好,bash 开发者):
variable=Hello World
./program "$variable"
-> program receives: 'Hello' 'World'

双引号它会做一些疯狂的事情(做得好,bash 开发者):
variable=Hello World
./program "'$variable'"
-> program receives: "'Hello" "World'"

有没有简单的方法来做到这一点?哎呀,有没有办法做到这一点?

更新:好的,由于问题似乎不是 bash,这里有一些附加信息。
我传递参数的程序是一个 python 脚本。不以任何方式修改参数,我得到
print sys.argv
-> ['/usr/bin/program', "'Hello", "World'"]

我该如何解决?

编辑:不,我没试过
variable="Hello World"

因为我从不声明 $variable。它没有在我的 bash 函数中声明,我不允许修改它。

编辑:好的,我让它以这种方式工作。
local temp="$variable"
./program "$temp"

不过,我想知道为什么它会这样工作,而不是其他任何方式。

最佳答案

问题似乎出在“程序”内部

variable="Hello World"    # quotes are needed because of the space
./program "$variable"     # here quotes again

并在程序内部
echo "program received $# arguments:" 
i=1
for arg in "$@"      # again quotes needed
do echo "arg $((i=i+1)): '$arg'"    # and again
done

关于Bash:将变量作为单个参数/shell 引用参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13007501/

相关文章:

debugging - 使用带有 jinja2 模板的 App Engine 交互式控制台

mysql - MySQL 中何时使用单引号、双引号和反引号

python - 属性错误: 'module' object has no attribute 'add_arg_scope'

python 正则表达式匹配一组中的一个或多个字符,除了特定的替代项

从管道 bash 脚本运行时,Python 脚本不等待用户输入

bash - 从shell脚本中的行首删除字符?

api - 一个很好的名人名言 API

javascript - 单引号 (') and double quote (") 在 jQuery 中是否像在 PHP 中一样工作?

regex - 在 bash 中提取一段字符串?

bash - 需要使用 bash 和 awk 计算数组的标准差吗?