我想将一个字符串作为命令行参数传递给bash脚本; 我的bash脚本就是:
>cat test_script.sh
for i in $*
do
echo $i
done
我打字
bash test_script.sh test1 test2" test3 test4"
输出:
test1
test2
test3
test4
我期待的输出:
test1
test2
test3 test4
我尝试使用反斜杠(test1 test2" test3 \ test4")和单引号,但我没有得到预期的结果。
如何获得预期的输出?
答案 0 :(得分:8)
您需要使用:
for i in "$@"
do echo $i
done
甚至:
for i in "$@"
do echo "$i"
done
第一个会在参数中丢失多个空格(但会将参数的单词保持在一起)。第二个保留参数中的空格。
您也可以省略in "$@"
子句;如果你写for i
(但个人而言,我从不使用速记),这是隐含的。
答案 1 :(得分:-1)
尝试使用printf
for i in $* do $(printf '%q' $i) done