在这个例子中,bash如何解析引号?

时间:2016-06-11 00:31:29

标签: bash

我正在运行一个例子并试图弄清楚如何解析参数。

colour1="red"
colour2="light blue"
colour3="dark green"

for X in "$colour1" $colour2" $colour3"
do
    echo $X
done

请注意,奇怪的缺失引号不是拼写错误。这只是博客中的一个测试示例。

我得到的输出是

  

红色

     

     

蓝绿色

我预期的输出是

  

红色

     

     

蓝色

     

深绿色

因为colour2不受引号保护,但colour1和colour3应该是。口译员在做什么?

1 个答案:

答案 0 :(得分:4)

由于$colour2"$ colour3"紧邻,因此在参数展开之前它们会形成一个单词。以下是扩展的进展情况:

  1. 您从$colour2" $colour3"
  2. 开始
  3. 参数展开将其转换为light blue" dark green"
  4. 分词应用于未加引号空格的扩展结果。由于只有一个未加引号的空格,因此产生的两个单词为lightblue" dark green"
  5. 最后执行引用删除,产生lightblue dark green