如何理解反斜杠的机制?

时间:2018-01-08 18:30:00

标签: bash shell

我正在学习bash。当我试图进入时

echo {a,b,c} ,{\ 1," 2",' 3'}

返回

a b c , 1 , 2 , 3

我试图进入

echo {a,b,c}\ ,{\ 1," 2",' 3'}

返回

a , 1 a , 2 a , 3 b , 1 b , 2 b , 3 c , 1 c , 2 c , 3

我注意到唯一的区别是第二个命令包含\。有人可以解释\的机制或两个命令如何以不同的方式工作?谢谢!

1 个答案:

答案 0 :(得分:2)

空间充当IFS(内部现场分离器)。第一个例子

echo {a,b,c} ,{\ 1," 2",' 3'}

有两个不同的群组{a,b,c},{\ 1," 2",' 3'}。打印出第一个,然后展开并打印第二个(逗号,然后是序列中的每个项目)。

你的第二个例子,反斜杠转义了IFS,它告诉你的shell它是一个文字空格字符。所以

echo {a,b,c}\ ,{\ 1," 2",' 3'}

扩展第一个中的每个项目,合并1个空格和1个逗号,然后从第二个序列中的每个项目生成:

 a , 1 a , 2 a , 3 b , 1 b , 2 b , 3 c , 1 c , 2 c , 3
每个组合

a , 1a , 2以及a , 3b , 1等等(然后再用空格分隔,因为默认情况下它是IFS)< / p>