簡體   English   中英

Bash模式中的引號替換變量擴展

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM