我正在学习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
我注意到唯一的区别是第二个命令包含\
。有人可以解释\
的机制或两个命令如何以不同的方式工作?谢谢!
答案 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 , 1
和a , 2
以及a , 3
和b , 1
等等(然后再用空格分隔,因为默认情况下它是IFS)< / p>