在 bash 中,可以转义包含空格的参数。
foo "a string"
这也适用于命令或函数的参数:
bar() {
foo "$@"
}
bar "a string"
到目前为止一切顺利,但如果我想在调用 foo
之前操纵参数怎么办?
这不起作用:
bar() {
for arg in "$@"
do
args="$args \"prefix $arg\""
done
# Everything looks good ...
echo $args
# ... but it isn't.
foo $args
# foo "$args" would just be silly
}
bar a b c
那么当参数包含空格时如何构建参数列表?
最佳答案
有(至少)两种方法可以做到这一点:
使用数组并使用
"${array[@]}"
展开它:bar() { local i=0 args=() for arg in "$@" do args[$i]="prefix $arg" ((++i)) done foo "${args[@]}" }
那么,我们学到了什么?
"${array[@]}"
是${array[*]}
什么"$@"
是$ *
.或者,如果您不想使用数组,则需要使用
eval
:bar() { local args=() for arg in "$@" do args="$args \"prefix $arg\"" done eval foo $args }
关于bash - 构建包含空格的参数列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/411495/