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") 和单引号,但没有得到预期的结果。

如何获得预期的输出?

4

2 回答 2

8

你需要使用:

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

甚至:

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

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

您也可以省略该in "$@"子句;如果您写,则暗示它for i(但就个人而言,我从不使用速记)。

于 2012-11-01T11:10:26.330 回答
-1

尝试使用 printf

for i in $* do $(printf '%q' $i) done
于 2012-11-01T11:08:17.657 回答