./test_arg.sh と同じように、すべての引数を変数 $ARGS に連結し、それらすべてを一度にまとめてコマンドに渡します。
しかし、引用符で囲まれた文字列を含む引数が複数の引数に分割されていることがわかりました。
ここに私のテストスクリプトがあります.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 プロセスの引用方法だと思います。誰でもそれについて知っていますか?