【发布时间】:2023-03-03 08:13:22
【问题描述】:
我有一个变量:
var='aaa bbb "ccc ddd"'
还有下面的参数——打印./script.sh:
#!/bin/bash
for arg in "$@"; do
echo "$arg"
done
预期结果:
$ ./script.sh $var
aaa
bbb
ccc ddd
实际结果:
$ ./script.sh $var
aaa
bbb
"ccc
ddd"
$ ./script.sh "$var"
aaa bbb "ccc ddd"
$ ./script.sh ${var@Q}
'aaa
bbb
"ccc
ddd"'
有没有办法实现它?
我无法控制 $var - 例如,它不能是数组。
【问题讨论】:
-
如果
var是一个数组,它的内容会是什么样子?您至少需要举一个例子,就像您为标量提供的那样。此外,还不清楚var="aaa bbb 'ccc ddd'"或var='aaa bbb `ccc ddd`'的预期结果应该是什么。您需要定义var内允许使用哪些引号。 -
作为一个数组很简单:
arr=(aaa bbb "ccc ddd"),./script.sh "${arr[@]}"。我的意思是,它不能是一个数组,我得到$var作为给定的,需要使用它 -
对不起,在这一点上误读了您的问题。不过,您需要澄清我提到的其他问题。此外,了解
var中可以出现哪些其他字符也很重要。例如,是否只有字母、空格和引号? -
var就是这样。我无法控制它。我想使用一些 bash-quoting-voodoo-magic 将它传递给./script.sh,以某种方式给我预期的输出。我想像./script aaa bbb "ccc ddd"一样工作,但使用var而不是显式参数。
标签: bash shell escaping quoting