我是新来的巴什,我看到有自动分词,由巴什:
a="1 2 3 4"如果我重复echo $a的"a“,我就得到了1 2 3 4,它已经隐式地进行了分词。如果循环遍历"a",则分别得到1、2、3和4。
我还从这里上读到
shell扫描参数展开、命令替换和算术扩展的结果,这些结果没有出现在双引号内,用于分词。
我还发现如果我有
b=$a;
echo "$b"我会得到
"1 2 3 4"所以,我的问题是:分裂这个词什么时候完成?它会改变字符串本身吗?它是否只在我使用echo或for (循环)时生效?
更普遍地说,bash是如何处理它的?
发布于 2013-08-28 21:14:58
读man bash。关于任务,上面写着
所有的值都经历了倾斜展开、参数和变量展开、命令替换、算术扩展和移除引号。除"$@“外,不执行分词,如下所示,在特殊参数下进行解释。不执行路径名称展开。
在[[ ]]条件下也不会发生分词:
[和]之间的单词不执行分词和路径名展开。
发布于 2013-08-28 21:25:51
实际上有几轮分词。第一个步骤是在解析命令行之前执行的,因此echo $a被分成两个单词echo和$a。(这就是为什么像a="echo foo | wc -l"; $a这样的东西不执行管道;解析在展开$a之前已经完成)。在这一轮分字结束后,参数展开将产生两个字符串,echo和1 2 3 4。由参数展开产生的字符串本身经历分字,因为它没有被引用,从而产生了4个额外的单词1、2、3和4。
在for循环中,列表中的项受分字限制:
for b in $a; do展开(在分字产生for、b、in、$a、;和do之后)到for、b、in、1 2 3 4、;和do。同样,由参数扩展产生的字符串将经历分词到1、2、3和4。
发布于 2013-08-28 21:32:33
在解析脚本或命令行时,Bash作为下一步工作:
正如你所看到的,分裂这个词几乎在结尾,所以在例如算术导出之后,但是在文件名全局之前,删除引号是最后一步。
https://stackoverflow.com/questions/18498218
复制相似问题