HOWTO · Linux
如何在 Bash 中串接字串
本文介紹如何在 Bash 中串接字串,包括並排放置變數、使用 += 附加內容、在迴圈中逐步組合字串,以及透過命令替換插入命令輸出。範例也會說明如何明確加入分隔空格,以及為什麼將變數展開加上引號。
本頁內容
在 Bash 中,可以將加上引號的值並排放置來串接字串,也可以用 += 將內容附加到既有變數。只有在指定的值中明確放入空格時,結果才會包含空格。
方法 1:基本串接
要組合兩個值,請將加上引號的變數展開式放在一起。需要分隔符號時,直接在引號內加入:
string1="Hello"
string2="World"
result="$string1 $string2"
printf '%s\n' "$result"
這裡的 result 會包含 Hello World,因為 $string1 和 $string2 之間明確放了一個空格。將值傳給命令時,請像 printf '%s\n' "$result" 這樣為展開式加上引號,讓空格和萬用字元保留在值中,避免字詞分割或路徑名稱展開。若相鄰文字可能被當成變數名稱的一部分,可用大括號界定變數名稱,例如 "${string1}_suffix"。Bash 變數沒有固定的字串或整數型別,因此看起來像數字的值也可以作為文字放入字串,例如先設定 number=42,再設定 label="ID: $number"。
方法 2:使用 += 運算子
使用 += 將右側文字附加到變數目前的值:
greeting="Hello"
greeting+=" World"
printf '%s\n' "$greeting"
" World" 開頭的空格會成為附加內容的一部分,因此 greeting 會是 Hello World。這裡的 += 會更新同一個變數,作用是附加字串,而不是做算術加法。
方法 3:串接多個字串
加上引號的變數展開式和文字可以相鄰組合成一個值。請在需要的位置放入分隔符號:
first="Bash"
second="is"
third="great!"
combined="$first $second $third"
printf '%s\n' "$combined"
三個展開值會依序組合,賦值內容中的兩個空格提供了分隔符號。如果預期格式不需要空格,就不要加入;Bash 不會自動插入分隔符號。
方法 4:在迴圈中串接字串
依序附加每個項目。此範例會在項目間加入空格,因此不會留下尾端空格:
result=""
separator=""
for word in "Learning" "Bash" "is" "fun"
do
result+="${separator}${word}"
separator=" "
done
printf '%s\n' "$result"
第一個項目前不加分隔符號。每次處理項目後,separator 都會設為一個空格,讓後續項目以空格分開,而最後的值會以 fun 結尾。你可以將引號中的單字替換成自己的迴圈值;插入可能含有空格或 shell 萬用字元的值時,請為展開式加上引號。
方法 5:使用命令替換
命令替換的語法是 $(...),它會執行命令,並將標準輸出替換到外層賦值內容中:
name="John"
greeting="Hello, $(printf '%s' "$name")!"
printf '%s\n' "$greeting"
命令的輸出會插入 Hello, 和 ! 之間。命令替換會移除輸出末尾的換行字元;在命令內使用值時,請為其加上引號,之後將結果變數作為引數使用時也要加上引號。
結論
在 Bash 中串接字串時,可以將加上引號的值並排放置、明確加入分隔符號,或使用 += 附加到既有值。迴圈可以重複附加操作,而 $(...) 可以插入命令輸出。將值傳給命令時,請為展開式加上引號,讓空格和萬用字元留在值中。
常見問題
-
如何在 Bash 中串接兩個字串?
將加上引號的變數展開式並排賦值,例如combined="${first}${second}",或使用combined+="$second"附加第二個值。如果結果需要空格,請在引號中的文字明確加入空格。 -
可以在迴圈中串接字串嗎?
可以。使用+=將每個項目附加到結果變數;如果組合後的值需要分隔符號,請明確加入。 -
Bash 中的命令替換是什麼?
$(...)會執行命令,並將其標準輸出插入外層文字中。輸出末尾的換行字元會被移除。 -
如何取得字串長度?
使用${#value}取得 Bash 變數值的長度。字元計數可能會受目前使用的地區設定影響;在C地區設定中,計算的是位元組數。 -
可以串接含有特殊字元的字串嗎?
可以。雙引號會保留空格,並避免變數值中的萬用字元展開;但若要將$、反引號或引號等 shell 語法字元當成字面內容輸入,仍可能需要加上引號或跳脫。處理任意文字時,請選擇能避免 shell 在賦值前解讀其中字元的引號方式。