Bash

Bash:如何從字元串中刪除字元,直到我擊中特定字元

  • July 28, 2019

基本上,我正在嘗試製作一個在某一時刻需要儲存座標的程序。在程序的一部分中,我需要將一個字元串分成兩部分,這樣我就能夠分別對這兩個字元串進行數學運算,然後重新連接這兩個字元串。需要如何在一種虛擬碼中更改字元串的範例:

Var1="10 17"
separate Var1 into Var2 and Var3
#using the command echo "$Var1,Var2,Var3" here would output 10 17,10,17
#preform math on Var2 and/or Var3 here
Var1="$Var2 $Var3"

部分問題是我不能只做

Var2=${Var1::-2}

或任何等價物用於刪除第一個字元以刪除第一個或最後兩個數字,因為這些數字有時可能大於 99 或小於 10。請注意,我希望兩個數字之間的分隔符是一個空格。有人知道我該怎麼做嗎?

如果分隔符是單個空格,請使用前綴和後綴剝離

before_the_first_space="${Var1%% *}"
after_the_first_space="${Var1# *}"
before_the_last_space="${Var1%* }"
after_the_last_space="${Var1##* }"

或者,利用不帶引號的變數替換的分詞。這將每個空白序列視為分隔符並將結果放入數組中。set -f禁用萬用字元擴展set +f將其重新打開。

set -f
parts=($Var1)
set +f
echo "${parts[0]}"

或者,使用read內置函式將變數拆分為數組。read從標準輸入讀取,因此使用此處的字元串將變數的內容作為輸入傳遞。

read -r -a parts <<<"$Var1"

不帶引號的替換方法和read基於 的值拆分的方法IFS

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