2016-11-03 44 views
0

我想直接在bash中爲數組賦值。 請參閱以下,我可以直接在bash中爲數組賦值一個擴充嗎?

function chmod_func() { 
    local file_path="$1" 
    local chmod_options=(${2:='-R 744'}) # This line has error. 
    sudo chmod "${chmod_options[@]}" "${file_path}" 
} 

chmod_func "test.txt" 

的錯誤消息之後,

$2 : cannot assign in this way 

如果有人知道的解決方案,請讓我知道。非常感謝你。

+0

bash的哪個版本您使用的?我能看到的唯一問題是您正在向後指定選項;應該是'-R 774',而不是'774 -R' ... –

+0

@I'L'I:我很抱歉提問正確。它也適用於我的bash。上面的代碼是有錯誤的原始代碼的一部分。我應該測試提取的代碼。我很抱歉。我會在3分鐘內刪除這個問題。 – mora

+0

@ I'L'I:我改變了主意我不會刪除這個問題,而是關閉它,因爲下面的cdarke回答很有用。它提供解決方案。 – mora

回答

3

請注意來自@ l'L'l的有關參數順序的評論至chmod

您可以通過幾種方式設置個別元素。首先,你試圖要使用的語法:

chmod_options=([2]='744 -R') 
echo ${chmod_options[@]} 
echo ${!chmod_options[@]} 

給出:

744 -R 
2 

但你可以簡單地說:

chmod_options[2]='744 -R' 

什麼是一個謎是爲什麼你想這樣做。在你給出的例子中,它看起來沒有任何用處。

你不在這裏做的是使用函數$2的第二個參數,因爲某些原因,你正在對函數中的值進行硬編碼。您無法做到這一點:

2='744 -R'   # illegal 

但是如果你需要一個數組,你可以這樣做:

chmod_options[2]="$2" 

或本:

chmod_options="$2" 

注意這裏使用引號。

你並不真的需要你的榜樣陣列,這裏是我的版本,其中只使用參數:

function chmod_func() { 
    local file_path="$1" 
    shift # remove the first parameter 

    sudo chmod [email protected] "${file_path}" 
} 

chmod_func "test.txt" -R 744 
相關問題