2017-11-30 19 views
0

引用された変数を使用してスクリプト内のスクリプトを呼び出す際に問題があります。スクリプトで二重引用符で囲まれた変数

#!/bin/sh 

while getopts c:a: optionalargs 
do 
     case $optionalargs in 
      c)copt=$OPTARG;; 
      a)aopt=$OPTARG;; 
      *)echo "Invalid arg";; 
     esac 
done 

if [ ! -z "$copt" ] 
then 
    export CHAR_SET=$copt 
fi 

if [ ! -z "$aopt" ] 
then 
    export ADDITIONAL_FLAGS=$aopt 
fi 

shift $((OPTIND -1)) 

/var/bin/script1.sh "${CHAR_SET}" "${ADDITIONAL_FLAGS}" 

結果:

引用符なし/var/bin/script1.sh ${CHAR_SET} ${ADDITIONAL_FLAGS}を使用している場合、引用符

./a.sh -a additional -c character 
too many arguments . Use -h for help 

/var/bin/script1.sh "${CHAR_SET}" "${ADDITIONAL_FLAGS}"を使用して

./a.sh -a additional -c character 
script runs fine 

質問:

なぜ二重引用符がスクリプトに失敗するのですか?グロビングを防ぐべきではないか?

+0

シバンラインを '#!/ bin/sh -x'に変更し、どのデバッグ出力が得られるかを確認してください。 – anubhava

+0

それは私に './a.sh -a 'という追加の' -c '文字を与えました。最小限の例のために2つのパラメータがありますが、実際は7です。 – SriniV

+0

メインスクリプトをDOがうまくいくという議論と、うまくいかない議論もあります。あなたが指定したエラーメッセージを得ることができません。例えば./code.sh -a additional -c "character extra" 'を使用します。がんばろう。 – shellter

答えて

0

この問題は、内部的に呼び出されているスクリプトで特定されています。二重引用符で囲まれた引数を処理し、一重引用符で置き換えます。だから、これは本当に問題ではありません。

関連する問題