2015-05-04 62 views
0

試圖在bash腳本中打印一個字符串,但它會讓我無法預料地發生變化。不能在bash中打印帶括號的字符串

$> /usr/local/bin/bash --version 
GNU bash, version 4.3.33(1)-release (x86_64-apple-darwin14.1.0) 

下面是同樣簡單的腳本三種方式中,只有一個人不工作,我會期望

將打印role[ba]預期

#!/usr/local/bin/bash 

default="role[ba]"  
echo $default 
exit 1 

打印roles代替role[bas]預計不到

#!/usr/local/bin/bash 

default="role[bas]"  
echo $default 
exit 1 

打印role[foo]預期

#!/usr/local/bin/bash 

default="role[foo]"  
echo $default 
exit 1 

我不知道有足夠的瞭解慶典,我爲什麼不能打印字符串瓦特/它role[bas]

+0

你必須在當前目錄中的文件'roles'?如果你不引用這個變量,它會擴展到你的目錄中的目錄/文件名。 – fedorqui

+0

啊 - 你是對的! – veilig

回答

1
$ touch roles 
$ echo role[abc] 
role[abc] 
$ echo role[rst] 
roles 
$ echo role[foo] 

[]是shell globbing語法(字符類)的一部分。如果你不希望發生混淆,請引用你的變量。如果你不想分詞,也一樣。基本上,總是引用你的變量,除非你有一個理由不。

所以:

echo "$default"