我将所有参数连接到一个变量 $ARGS 中,并将它们全部传递给一个命令,就像./test_arg.sh所做的一样。
但是我发现带引号的字符串的参数被分成了多个。
这是我的测试脚本,test_arg.sh执行测试用例,而arg.sh只是在单独的行上打印每个参数。
$ cat ./test_arg.sh
#!/bin/sh
ARGS="$ARGS OPT_1"
ARGS="$ARGS OPT_2"
ARGS="$ARGS 'OPT_3 is a string with space'"
echo "./arg.sh $ARGS"
echo '----------------------------'
./arg.sh $ARGS
[ xiafei@xiafeitekiMacBook-Pro ~/tmp ]
$ cat ./arg.sh
#!/bin/sh
for var in "$@"
do
echo "arg -> $var"
done
结果如下:
$ ./test_arg.sh
./arg.sh OPT_1 OPT_2 'OPT_3 is a string with space'
----------------------------
arg -> OPT_1
arg -> OPT_2
arg -> 'OPT_3
arg -> is
arg -> a
arg -> string
arg -> with
arg -> space'
但是,如果我将参数直接放在命令之后,它可以正常工作:
$ cat test_arg.sh
#!/bin/sh
./arg.sh OPT_1 OPT_2 'OPT_3 is a string with space'
[ xiafei@xiafeitekiMacBook-Pro ~/tmp ]
$ sh test_arg.sh
arg -> OPT_1
arg -> OPT_2
arg -> OPT_3 is a string with space
我想问题是 bash 进程引用的方式。有人知道吗?