我正在编写一个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"
我想知道为什么它以那种方式工作,而不是其他任何方式。
./program "$variable"
传递一个参数,该参数可能包含空格,程序在做什么? - Nahuel Fouilleulvariable="Hello World"
吗? - Vijaytemp=$variable
;不需要这样写:temp="$variable"
。然而,当将变量作为参数传递给./program
时,你确实需要使用引号,否则变量的值会被展开;例如,请使用:./program "$temp"
,而不是./program $temp
。即使不使用变量,你也可以复现这个情况;比如:好的写法是:./program "one two"
;错误的写法是:./program one two
。 - michael