相关疑难解决方法(0)

我什么时候可以使用临时 IFS 进行字段拆分?

在 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会影响场分裂。

bash

19
推荐指数
2
解决办法
1857
查看次数

在 for 循环之前临时更改 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循环等复合语句?

bash for assignment

2
推荐指数
1
解决办法
256
查看次数

为 for 循环设置 IFS 时的奇怪 bash 行为

我有一个值列表,用 ':' 分隔,我想一一处理它们。

当分隔符为空格时,没有问题:

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)

bash for

2
推荐指数
1
解决办法
190
查看次数

标签 统计

bash ×3

for ×2

assignment ×1