[英]Do escaped double quotes in command substitution become literals in Bash?
如果我在Bash中執行此操作
echo "1 2"
我得到1 2
。 但是如果我執行
echo \"1 2\"
我得到"1 2"
。
現在我想知道是否執行
echo $(echo \"1 2\")
我會得到1 2
。 但是,我再次得到"1 2"
。 實際上,無論鏈中有多少命令替換
echo $(echo $( ... echo \"1 2\") ... )
我總是得到"1 2"
。 這是為什么?
將$(command)
的輸出替換回命令行后,唯一要做的附加解析是單詞拆分和通配符擴展。 引號不會被處理,因此如果命令輸出引號,引號將作為文字字符保留在命令行中。
bash手冊中有關“ 去除報價”的部分對此進行了說明:
在前面的擴展之后,所有不是由上述擴展之一引起的字符'\\','''和'“'都被取消了引號。
由於引號是由命令替換產生的(這是在此之前列出的擴展之一),因此不會刪除它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.