arrays - Bash:使用 IFS 将数组连接成字符串

标签 arrays bash ifs

谁能解释一下这是怎么回事。所有这些都在同一个 shell 中连续执行。

$ array=(a b c)
$ echo "${array[*]}"
a b c

到目前为止一切顺利。

$ IFS=/ echo "${array[*]}"
a b c

没关系,扩展发生在整行执行之前。

$ IFS=/ x="${array[*]}"
$ echo $x
a b c

这里也是一样,展开先发生,x 得到那个值。

$ echo "${array[*]}"
a/b/c

但是 ${array[*]} 发生了变化,而且变化是永久性的。

$ x="${array[*]}"
$ echo $x
a b c

好的,我认为这很正常 - 原始的默认 IFS 值用于扩展此赋值中的数组变量。

$ echo "${array[*]}"
a/b/c
$ 

但这对我来说完全没有意义。首先,这里没有使用默认的 IFS。其次,赋值 x="${array[*]}" 并没有像以前那样影响 ${array[*]} 的值,在 IFS=/x="${array[*]}" 中。

最佳答案

当您使用时:

IFS=/ echo "${array[*]}"

然后将 IFS 设置为 echo 命令的本地(尽管 echo 未使用)

当您使用时:

IFS=/ x="${array[*]}"

然后这是两个单独的变量赋值,一个用于 IFS,一个用于 x,因此 IFS 现在永久更改为 /,如@jaypal 所述。

当您使用时:

$ echo "${array[*]}"

然后 - 当引用时 - IFS 的第一个字符用作输出字段分隔符并扩展数组

如果不加引号,则生成空格分隔的字段:

$ echo ${array[*]}

另外,当你会使用:

$ echo "${array[@]}"

然后每个数组元素被扩展为一个单独的单词,因此不使用输出字段分隔符,因此它变成一个空格..

关于arrays - Bash:使用 IFS 将数组连接成字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22124417/

相关文章:

linux - 如何在 bash 中打印感叹号?

bash - 如何使用 awk 按天将带时间戳的日志文件拆分为多个文件

bash - 在 Bash 中将定界字符串解析为数组 - 为什么 "$var"与 $var 不同,尽管 $var 没有空格?

bash - IFS= $'\n' 的确切含义是什么?

java - 如何在一个数组中打印数组函数?

c - 将结构传递给函数

arrays - 在 VBA 中使用数组创建堆积柱形图

Linux Expect SSH 挂起

git - 如何使用列单位分隔符查看 git 日志?

python - 如何一次将一个超大文件读入 numpy 数组 N 行