[英]Quotes in Bash pattern substitution variable expansion
我應該在執行Bash參數擴展時引用變量嗎?
例如,在下面, "${E}"
應該在引號中嗎?
(
E="-END"
X=(ABC 123 "ABC 123")
X=("${X[@]/%/"${E}"}")
IFS=$'\n'
echo "${X[*]}"
)
我注意到4.2版本的bash會產生以下輸出
ABC"-END"
123"-END"
ABC 123"-END"
但是在4.3版本的bash中,這將導致以下輸出
ABC-END
123-END
ABC 123-END
這是一個修復過的錯誤嗎?
編輯。 將"$E"
更改為"${E}"
這不是錯誤,但在官方更改日志中記錄 :
本文檔詳細介紹了此版本bash-4.3-alpha與之前版本bash-4.2-release之間的更改。
...
Z Z。 當使用模式替換字擴展時,bash現在通過引用刪除來運行替換字符串,因為它允許該字符串中的引號充當轉義字符。 這不是向后兼容的,因此可以通過將bash兼容模式設置為4.2來禁用它。
要切換兼容模式(如果要進行實驗):
shopt -s compat42
你會看到4.3的行為類似於4.2,並且取消它:
shopt -u compat42
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.