Bash

轉義 _$(下劃線和美元符號)

  • February 22, 2017

我有這個 Bash 腳本

for i in 1 2 3
do
   for j in 4 5 6
   do
       echo "hello_$i_$j"
   done
done

但它列印

你好

_4你好_5 你好

_6

三次,而(你可能猜到)我想要hello_1_4hello_1_5等。

僅轉義下劃線或僅轉義美元符號不起作用。有任何想法嗎?

謝謝!

將行:添加set -u到程式碼的頂部。然後重新執行,看看你得到了什麼。

變數i_未綁定的錯誤,意味著未在任何地方定義。現在為什麼 bash 談論這個變數i_?你沒有在任何地方定義它。仔細查看您的 echo 語句:"hello_$i_$j"$i 之後的下劃線被視為變數i_,因為_它是有效的變數名稱標識符字元。

因此,為了防止 bash 這樣做,您需要將變數名括在大括號中{},例如,echo "Hello_${i}_${j}"大括號可防止變數名溢出並與_. 注意:變數上的大括號$j是可選的,因為它"用於分隔的目的。

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