2017-04-07 6 views
0

私は2つのbashスクリプトを持っています。 1つは別のものを呼び出す。bash変数の違い

Caller.sh

arg1="+hcpu_extra=111 bbb" 
str="-y +hcpu_extra=111 bbb" 

local cmd_re="(-y)(.*)" 

if [[ $str =~ $cmd_re ]] 
then 
    opt=${BASH_REMATCH[1]} 
    arg=${BASH_REMATCH[2]} 
    echo "matched $opt" 
    echo "matched $arg" 
fi 


./callee.sh -y $arg 
## ./callee.sh -y $arg1 

私は、画面上で、私は$ ARG1と$ argのを印刷する場合、彼らは同じ値を示し、 "+ hcpu_extra = 111 BBB" を発見しました。しかし、私は引数としてそれぞれcallee.shに渡します。私は別の結果を得た。 私の質問は、bashインタプリタの観点から$ argと$ arg1の違いは何ですか? 。

+1

callee.shで得られる結果とはどのような違いがありますか? 'callee.sh'で' echo $ 2'を実行することを意味すると思います – Arash

+0

$ argはスペースで始まりますか? – Robin479

答えて

0

localは機能以外では使用できないため、最初はポストされたコードが正しく機能しません。

あなたがlocalを削除するか、または機能でこれを入れた場合は、argarg1の唯一の違いは、そのargスペースで始まり(「-y」と「+ HCPU」の間であった1。しかし、あなた以降」でありますIFSをスペースを含まないものに変更しない限り、これらの変数を二重引用符で囲まずに展開すると、削除されます...

(二重引用符のない変数参照とIFSの変更どちらも奇妙な影響を与える可能性があり、可能な限り避けてください)

とにかく私の要約は:投稿されたコードはあなたが記述した効果を表示しません。あなたは何か重要なものを残しているように見えます。 How to create a Minimal, Complete, and Verifiable exampleを参照してください。

+0

あなたは正しいです。コードスニペットは関数内からのものでした。 二重引用符は必ずしも良い選択ではありません。 –