如何将字符串作为bash脚本的命令行参数传递?

How to pass a string as command line argument for bash script?

本问题已经有最佳答案,请猛点这里访问。

我想将字符串作为命令行参数传递给bash脚本;简单来说,我的bash脚本是:

1
2
3
4
5
6
>cat test_script.sh

for i in $*
do
echo $i
done

我打字

bash test_script.sh test1 test2"test3 test4"

输出:

1
2
3
4
test1
test2
test3
test4

我期望的输出:

1
2
3
test1
test2
test3 test4

我尝试了反斜杠(test1 test2"test3 est4")和单引号,但我没有得到预期的结果。

如何获得预期的输出?


您需要使用:

1
2
3
for i in"$@"
do echo $i
done

甚至:

1
2
3
for i in"$@"
do echo"$i"
done

第一个会在一个参数中丢失多个空格(但会将一个参数的单词放在一起)。第二个保留了参数中的空格。

你也可以省略in"$@"条款;如果你写for i是隐含的(但我个人从不使用速记)。


尝试使用PrimTf

1
for i in $* do $(printf '%q' $i) done