2017-04-07 104 views
0

我有2個bash腳本。一個正在呼喚另一個。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和$阿根廷,他們在屏幕上顯示相同的值 「+ 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」之間。但因爲你」重新擴大那些沒有雙引號的變量,這些變量會被刪除......除非你將IFS更改爲不包含空格的東西

(順便說一句,沒有雙引號的變量引用和對IFS的更改都是可以產生奇怪效果的東西,並且在可能的情況下最好避免。)

無論如何,我的總結是:發佈的代碼不會顯示您描述的效果;你似乎漏掉了一些重要的東西。請參閱How to create a Minimal, Complete, and Verifiable example

+0

你說得對。代碼片段來自函數內部。 雙引號並不總是一個很好的選擇。 –

相關問題