毕业论文开发语言企业开发JAVA技术.NET技术WEB开发Linux/Unix数据库技术Windows平台移动平台嵌入式论文范文英语论文
您现在的位置: 毕业论文 >> linux >> 正文

echo $IFS 和echo "$IFS" 什么区别

更新时间:2016-8-7:  来源:毕业论文

hank$ ifs=$IFS
hank$ echo -n $IFS | od -b
hank$ echo -n "$IFS" | od -b
0000000   040 011 012                                                   
0000003
hank$ IFS=`echo -en "\n"`
hank$ echo -n "$IFS" | od -b
hank$ IFS=`echo -en "\n\b"`
hank$ echo -n "$IFS" | od -b
0000000   012 010                                                       
0000002
hank$

01)echo $IFS 和 echo "$IFS" 什么区别?
02)为何 IFS=`echo -en "\n\b"` 后,echo 出 012 和 010
但 IFS=`echo -en "\n"` 后,echo 出来却什么都没有?
03)还有就是 IFS=`echo -en "\n\b"` 感觉和 IFS=`echo -e "\n\b"` 没区别,
为何此种写法下没加 -n 选项,结果却依然是 012 010,而不是 012 010 012
为何 IFS=`echo -e "\n"` 后,echo -n “$IFS” | od -b 会什么都没有呢?底层的原因是什么?我总结了一下,它会自动抹除末尾的所有 \n,这也是为何 IFS=`echo -e "\n"` 和 IFS=`echo -ne "\n"` 等效的原因。另外就是,控制符 \b 也是朵奇葩,只有当它后面有字符存在时,才会实施真正的 “退格” 操作,这些东西当做规则记忆没问题,但就是好奇为什么会这样,不符合逻辑,码农的世界里,要么 0 要么 1,这种模棱两可,
shell对变量进行展开之后,会去掉空白符,也就是说,会造成argc的减少。
例如A/B/C三个变量都是空的,echo $A $B $C,最终echo的argc=1。

PS,对于这种问题,以下的c程序有助于帮助理解。

[~]# cat arg.c
#include <stdio.h>
int main(int ac, char *av[])
{
    int i;
    for (i = 0; i < ac; i++) {
        char *p;
        printf("av[%d]: ", i);
        for (p = av[i]; *p; p++)
            printf("<%c>", *p);
        printf("\n");
    }
}
 
[~]# ./arg $NOT_DEFINED_A $NOT_DEFINED_B
av[0]: <.></><a><r><g>
 
[~]# ./arg "$NOT_DEFINED_A" "$NOT_DEFINED_B"

[1] [2] 下一页

设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优尔论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。