Bash
包含包含空格的字元串的數組上的 sed 問題
我有一個看起來像這樣的數組:
array=("(1 2 3) (123)" "2 31 (231)" "4 5 1 (451)" "(te)xt (1234)")
這個數組就是一個例子。它看起來不像這樣,但它的結構是相同的(字元串具有相同的結構)。
如果我想在
select
循環中使用單個字元串,我可以這樣做:select string in "${array[@]}" do # do something done
但括號中的字元串不用於顯示。所以我用 sed 來刪除它們:
echo "${array[@]}" | sed -r 's/ \([0-9]+\)$//g'
這沒有用。僅刪除了最後的括號,並且字元串已合併在一起。但是我怎樣才能達到與以下範例相同的預期結果:
array2=("(1 2 3)" "2 31" "4 5 1" "(te)xt") select string in "${array2[@]}" do # do something done
數組沒有意義
sed
。一旦您的bash
數組通過sed
,就變成純文字。用於
bash
刪除括號(假設要刪除的部分總是在字元串的末尾):array2=("${array[@]%(*}")
(在您
bash
的手冊中查看有關參數擴展的部分以獲取更多資訊。)