Chinaunix

标题: 关于SHELL解释输入命令行的疑惑(依然求助) [打印本页]

作者: jarhead1    时间: 2007-07-26 15:03
标题: 关于SHELL解释输入命令行的疑惑(依然求助)
今天遇到了一个疑惑的现象.
$a='1     2'
$echo "$(echo $a)"
1 2
$echo $(echo "$a")
1 2
$echo "$(echo "$a")"
1      2
前两个指令的结果没问题,最后一个的结果不懂啊.按照我的理解在shell扫描命令行时,会把<"$(echo "$a")">看成是<echo>的参数,那么在解释参数时发生了什么?另外从结果看<">配对给人的感觉怎么像<14>(第一个和第四个引号)是一对,<23>是一对.但我认为应该是<12>一对,<34>一对

任何帮助不胜感激

[ 本帖最后由 jarhead1 于 2007-7-26 15:31 编辑 ]
作者: 寂寞烈火    时间: 2007-07-26 15:10
跟IFS有关请读十三问, 另引号都是配对的
作者: jarhead1    时间: 2007-07-26 15:23
谢谢寂寞大哥
IFS的问题我看过
关于第一个结果是因为$在shell的变量置换后被shell默认的IFS=$' \t\n'分割的原因导致的
第二个结果也是类似的情况,但变成了命令置换
但对于第三个结果我确实不太懂,这样说OK,如果是
$ echo "$^echo "$a"^"
$^ 1 2^
对于这结果我也理解
那么为什么echo "$(echo "$a")"的结果是1     2.结果给人的感觉$先被shell解释并在有引号的作用下跳过了分割,然后在$()下由于双引号的作用也跳过了分割,也就是说引号配对似乎没有按照顺序依次来配对的.

哎,也许就差那么一点点的提醒,就豁然开朗了.
请有知道的明示

[ 本帖最后由 jarhead1 于 2007-7-26 15:45 编辑 ]
作者: jackwenghui    时间: 2007-07-26 15:52
呵呵,这个我也十分不明白的
对于第二个
$echo $(echo "$a")
1 2
为什么会的到这样的结果呢?
括号里面的echo "$a" 得出来是什么呢?
作者: jarhead1    时间: 2007-07-26 16:26
原帖由 jackwenghui 于 2007-7-26 15:52 发表
呵呵,这个我也十分不明白的
对于第二个
$echo $(echo "$a")
1 2
为什么会的到这样的结果呢?
括号里面的echo "$a" 得出来是什么呢?

########
在没有$()作用下是1    2,在$(echo "$a")下是1 2
作者: jackwenghui    时间: 2007-07-27 10:34
我想是不是可以这么解释
$(echo "$a" ) 其实最终显示了1       2
但是最外层的 echo  显示的时候空格被取消了!(我不知道这么说对不对,我是这么理解的。)
而echo "$(echo "$a")"这个在显示的时候,因为在外面有了""配对,保留了空格的原意。所以就可以显示1    2
作者: waker    时间: 2007-07-27 11:05
在shell解析命令行会进行两次词拆分
第一次用元字符
第二次发生在替代之后用IFS
有兴趣去翻翻精华帖




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2