IFS

本文解答了关于IFS(内部字段分隔符)设置与使用中的常见疑问,包括如何保存和恢复IFS,默认IFS的行为特点,以及IFS对参数扩展的影响等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
不妨來比較一下:

  1. [netman@www tmp]$ A=aaa
  2. [netman@www tmp]$ A="bbb" echo $A   #相当于A="bbb" echo aaa
  3. aaa
  4. [netman@www tmp]$ A=aaa
  5. [netman@www tmp]$ A="bbb"; echo $A #但是此处和前处不一样,因为这种形式的已经在shell中改变了A的值,变为了bbb
  6. bbb
  7. [netman@www tmp]$ A=aaa
  8. [netman@www tmp]$ A="bbb" eval echo /$A
  9. bbb

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值