1、如果我没保存原IFS,怎么用语句直接设置IFS
IFS=" /n/t"
这样设对吗,是恢复默认的吗??
答案:
1) 你可先將 IFS 存起來: old_IFS="$IFS"
要取回時再設 IFS="$old_IFS"
(記的雙引號一定要設哦)
2、我看说明中有:
IFS=
IFS=;
是一样的意思,我不明白既然一样为什么要用第二种形式呢??有什么特殊意义吗??还是仅用来区别与IFS=";"的不同。
第二种形式中的分号怎么解释??
答案:
若有兩個 command 打在同一行就用到
3、默认IFS时如果
A=" aaa"
echo $A
结果当然是
aaa
前面没有空格
但是
A=";;;;aaa"
IFS=";"
echo $A 时
结果却是
aaa
前面有四个空格,按道理不是应该没有空格吗?这是怎么回事呢??
答案:
这是由于作为 IFS 的空白字符 ( blank, tab, newline) 与其他 IFS 字符行为不同:
1. IFS 空白在输入的开始和结束处忽略。
2. 输入中每个非 IFS 空白的 IFS 字符,以及任何相邻的 IFS 空白,定界一个字段。
3. 非零长度 IFS 空格对字段进行定界。
如:
A="a 2 3 4" #a与2间有5个空格,2与3间有4个空格,3与4间有2个空格
echo $A
结果:
a 2 3 4
不管空格多少,都只输出一个空格
4、文件b的内容是
echo $*
echo $1
#IFS=";"
#./b 111 22222
结果和不设IFS是一样的,都是
111 2222 (--中间一个空格)
111
为什么在执行命令时IFS不起作用呢??
答案:
1. IFS 只对参数扩展有作用, $* 是 $1 - $n, 不包括 $0
2. IFS 对参数位置无作用. 参数位置由空白字符及有无" " 决定
在 "$*" 扩展时行为不同 (如较新版本的 bash, ksh). 这是 POSIX 标准.
但由于历史原因, 有些版本的 shell 并不按 man page 中所声明的那样扩展,
而是只用空格, 这样有无 IFS 对 "$*" 无影响
http://bbs.chinaunix.net/thread-512925-1-1.html
chinaunix-------
在 CR 之前, command line 已被重組為:
A="bbb" echo aaa
不妨來比較一下:
- [netman@www tmp]$ A=aaa
- [netman@www tmp]$ A="bbb" echo $A #相当于A="bbb" echo aaa
- aaa
- [netman@www tmp]$ A=aaa
- [netman@www tmp]$ A="bbb"; echo $A #但是此处和前处不一样,因为这种形式的已经在shell中改变了A的值,变为了bbb
- bbb
- [netman@www tmp]$ A=aaa
- [netman@www tmp]$ A="bbb" eval echo /$A
- bbb