2017-01-31 109 views
1

Heyhey, 因爲這是我的第一篇文章,請耐心等待:)我盡我所能。BASH grep結果作爲數組名稱

我嘗試將語言「grep」出我的系統(osx),並將其作爲字符串名稱來設置語言。

我有一些字符串稱爲$en['a' 'b' 'c']$de['d' 'e' 'f']$fr['g' 'h' 'i']某處...

我用:

language=$(locale | grep LANG= | cut -d'"' -f2 | cut -d_ -f1) 

,給了我像一個EN ISO值,法國,德國,...

這是我的主要問題。我只是不能只使用${language[*]}。這感覺就像我嘗試了一切。已經在嘗試與{}()''$發生錯誤。

唯一的事情,我發現在調試時是language結果

language=ISO(所以此工程在正確的)

,如果我試圖讓這個值是我所希望的字符串

echo ${language[*]} , ${language[0]} , ${language[1]} 

結果在

ISO , ISO , 

這不是正確。看起來我正在創建一個新的字符串,但我想使用現有的字符串。 不知道任何更多的關鍵詞,以谷歌:(

+0

究竟是什麼輸入?你期望輸出什麼? – choroba

+0

我剛剛填寫了一些輸入。我預計$ {en [@]}和$ {language [@]}的輸出是相同的。 – cr4nk89

回答

0

這些都使用數組語法:

echo ${language[*]} , ${language[0]} , ${language[1]} 

但是,你創建的變量的方式,這是不是一個數組,這是一個簡單的變量:

language=$(locale | grep LANG= | cut -d'"' -f2 | cut -d_ -f1) 

要訪問其值,使用簡單地$language,例如:

echo $language 

此外,localegrepcut的流水線以非常低效的方式獲取LANG變量的前兩個字符。 你可以得到它更有效地使用子:

language=${LANG:0:2} 

如果你想使用一個數組(雖然我沒有看到這裏的點),那麼你必須把周圍的括號內的值來分配,例如:

language=(${LANG:0:2}) 

此數組在這個例子中有一個元素,你可以這樣訪問它的值:

echo ${language[0]} 

注意猛砸的語法是非常嚴格的有R尊重符號和空間,每一個細節都可能會產生很大的差異,所以準確地編寫是很重要的。

您可以將您的腳本粘貼到shellcheck.net來檢查微不足道的錯誤。

您可以在man bash中閱讀有關陣列的更多信息。

+0

如果我在數組中有字符串,我不應該使用數組語法嗎?你說得對,它真的更有效率,謝謝。仍然無法通過$ language [] – cr4nk89

+0

訪問我的數組,它將是一個數組或字符串(你明白,對嗎?)。如果你真的想要一個數組,請執行'language =($(local ..... | ....))'。祝你好運。 – shellter