由分隔符分割的 bash 字符串在空值时中断

标签 bash

我有一个像LINE=foo,bar,,baz这样的变量

我尝试使用两种不同的技术将其与分隔符 , 分开:

  1. array=(${LINE//,/})
  2. array=($(echo "$LINE"| tr ',' '\n'))

echo ${array[2]} 应该返回一个空值,但它返回 baz (两者都将 baz 视为第三个值,而实际上它应该是第四个值。)

最佳答案

您可以使用 read -a 和备用分隔符来执行此操作:

IFS=, read -a array <<<"$LINE"

请注意,由于对 IFS 的赋值是 read 命令的前缀,因此它仅适用于该命令,您不必将其设置回去之后就正常了。此外,与依赖于未引用变量的分词的那些不同,它不会尝试将任何看起来像文件名通配符的条目“扩展”到匹配文件列表中。

演示:

$ LINE=foo,bar,,baz
$ IFS=, read -a array <<<"$LINE"
$ declare -p array
declare -a array='([0]="foo" [1]="bar" [2]="" [3]="baz")'

关于由分隔符分割的 bash 字符串在空值时中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73698670/

相关文章:

linux - 别名命令并在同一行代码中使用它

linux - 系统启动 10 分钟后运行 bash 脚本

linux - 使用变量中的用户名和密码进行 curl 下载

bash 脚本 : change all & to &amp; in all files

regex - 打印模式之间的所有行,其中任何行与第二个模式匹配

linux - sed:替换特定部分

ruby-on-rails - bash <<(curl -s https ://rvm. io/install/rvm) : What Does it Do?

执行后台任务的脚本上的 bash 命令替换

php - 通过 Web 服务器 bash 脚本执行 rsync 不起作用

linux - 如何使用 bash grep 查找字符串