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

5
我希望将一个字符串作为命令行参数传递给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")和单引号,但没有得到预期的结果。

如何获得预期的输出?


2
输出和期望的输出不是一样的吗? - Francois
2个回答

8

您需要使用:

for i in "$@"
do echo $i
done

甚至更多可能出现的情况是:
for i in "$@"
do echo "$i"
done

第一种方法会丢失参数内的多个空格(但会将参数中的单词保持在一起)。第二种方法保留了参数中的空格。
您也可以省略in "$@"子句;如果您写for i,它是隐含的(但我个人从不使用这个简写)。

-1
尝试使用printf。
for i in $* do $(printf '%q' $i) done

当你使用$*时,那是行不通的;你必须明确或隐式地使用"$@" - Jonathan Leffler
一个更详细的解释可能会有所帮助。 - dove

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接