Bash

包含包含空格的字元串的數組上的 sed 問題

  • December 22, 2013

我有一個看起來像這樣的數組:

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的手冊中查看有關參數擴展的部分以獲取更多資訊。)

引用自:https://unix.stackexchange.com/questions/106254