当我将IFS
变量设置为一个空格时,bash
将多个空格视为一个空格(myprogram
是一个打印它接收到的命令行参数的程序):
IFS=" "
x="hello hi world"
./myprogram $x
argv[1] = hello
argv[2] = hi
argv[3] = world
但是当我将IFS
变量设置为逗号时,bash
不会将多个逗号视为一个逗号:
IFS=","
x="hello,,,hi,,,world"
./myprogram $x
argv[1] = hello
argv[2] =
argv[3] =
argv[4] = hi
argv[5] =
argv[6] =
argv[7] = world
这是为什么?
这记录在
man bash
. IFS 中任何非空格字符的单次出现都会分隔一个字段。来自
man bash
:示例:字段拆分
如果 IFS 没有空格字符,则空格包含在字段中:
如果 IFS 同时包含空格和逗号,则空格序列、后跟逗号、后跟空格序列被视为单个分隔符:
逗号序列被解释为空字段序列:
示例:前导和尾随空格
如果 IFS 不包含空格,则任何前导和尾随空格都保留在字段中:
如果 IFS 确实包含空格,则删除任何前导或尾随的空格序列: