gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 05:27:42 25 4
gpt4 key购买 nike

我正在编写一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com