在 bash 中,假设您有var=a.b.c.,然后:
$ IFS=. printf "%s\n" $var
a.b.c
Run Code Online (Sandbox Code Playgroud)
但是,这样的用法IFS在创建数组时确实生效:
$ IFS=. arr=($var)
$ printf "%s\n" "${arr[@]}"
a
b
c
Run Code Online (Sandbox Code Playgroud)
当然,这非常方便,但这是在哪里记录的?快速阅读Bash 文档中有关数组或分词的部分并没有给出任何指示。对于搜索IFS通过单页文档不提供有关这种效应的任何暗示无论是。
我不确定何时可以可靠地执行以下操作:
IFS=x do something
Run Code Online (Sandbox Code Playgroud)
并预计这IFS会影响场分裂。
我知道SHELL允许在命令之前立即进行变量赋值,这样IFS=":" read a b c d <<< "$here_string"有效......
我想知道的是,当使用诸如循环之类的复合语句完成时,这样的赋值是否不起作用?我尝试了类似的方法,IFS=":" for i in $PATH; do echo $i; done但导致语法错误。我总是可以做类似的事情oldIFS="$IFS"; IFS=":"; for....; IFS="$oldIFS",但我想知道是否有任何方法可以使此类内联赋值适用于for循环等复合语句?
我有一个值列表,用 ':' 分隔,我想一一处理它们。
当分隔符为空格时,没有问题:
nuclear@korhal:~$ for a in 720 500 560 130; do echo $a; done
720
500
560
130
Run Code Online (Sandbox Code Playgroud)
但是在将 IFS(内部字段分隔符)设置为 : 后,奇怪的事情开始发生:
nuclear@korhal:~$ IFS=":" for a in 720:500:560:130; do echo $a; done;
bash: syntax error near unexpected token `do'
Run Code Online (Sandbox Code Playgroud)
如果我跳过所有分号,则在设置 IFS 时:
nuclear@korhal:~$ IFS=":" for a in 720:500:560:130 do echo $a done;
Command 'for' not found, did you mean:
command 'vor' from deb vor (0.5.8-1)
command 'fop' from deb fop (1:2.5-1)
command 'tor' from deb tor (0.4.4.5-1)
command …Run Code Online (Sandbox Code Playgroud)