考虑:
双引号使空变量计为参数
emptyvar:“”
printf%s%s%发送$emptyvar a b c
回音“
printf%s%s%发送“$emptyvar”a b c
回音“
回音“
空=()
printf%s%s%send${empty[@]}a c b
回音“
printf%s%s%send“${empty[@]}”a b c
哪些输出:
abcend
阿本森德
弯曲
阿本德
在线试用!
我明白第一个例子。
我知道在第二个例子中,由于分词的工作原理,双引号以某种方式迫使空字符串被视为arg,但我对细节还不清楚。
我认为第三个示例的工作原理与第一个类似:在分词过程中它只是作为空白处理。
我也不清楚为什么在第四种情况下要特别处理阵列。
我想解释一下引擎盖下发生的事情,以便更好地理解它,并附上ManBash的相关引述(我找不到任何解释这种行为的东西,但可能遗漏了它)。
哪些输出:
abcEND
abENDcEND
acbEND
abcEND
上网试试吧!
我明白第一个例子。
我知道在第二个例子中,双引号以某种方式迫使空字符串被认为是一个参数,因为分词是如何工作的——但是我对细节还不清楚。
我
认为
第三个示例的工作方式与第一个类似:它只是在分词过程中作为空白处理。
我也不清楚为什么在第四种情况下阵列会被特别处理。
为了更好地理解这一点,我想解释一下在幕后发生的事情,同时引用man bash的相关话(我找不到任何解释这一行为的东西,但可能遗漏了它)。