【问题标题】:How this two spliting method differs in bash?这两种拆分方法在 bash 中有何不同?
【发布时间】:2015-09-19 08:27:10
【问题描述】:

我早些时候在 bash 中处理字符串拆分问题。经过一番搜索,我发现了两种方法来拆分字符串并制作拆分部分的数组。

但是当我打印它们时,我得到了不同的结果。

a="hello,hi,hola"

方法一:

IFS=',' read -ra arr <<< "$a"
echo "${arr[@]}"

输出:

hello hi hola

方法二:

arr=$(echo $a | tr "," "\n")
echo "${arr[@]}"

输出:

hello
hi
hola

这背后的原因是什么?

【问题讨论】:

  • 在您的方法 2 中,arr 不是数组。您需要:arr=( $(echo $a | tr "," "\n") ) 使其成为一个数组。然后,如果您有连续的空格字符或全局字符,您将遇到问题。使用方法 1,甚至更好,IFS=, read -r -d '' -a arr &lt; &lt;(printf '%s,\0' "$a"),这是在 Bash 中拆分字符串的规范方法。见stackoverflow.com/questions/918886
  • 您可以将其写为格式良好的答案,以便其他用户可以得到帮助。 :)

标签: bash string-split


【解决方案1】:

在您的方法 2 中,arr 不是数组。你需要:

arr=( $(echo $a | tr "," "\n") )

使它成为一个数组。

如果您有连续的空格字符或全局字符,使用此方法会遇到问题。使用方法1,甚至更好,

IFS=, read -r -d '' -a arr < <(printf '%s,\0' "$a")

这是在 Bash 中拆分字符串的规范方法。见How do I split a string on a delimiter in Bash?

【讨论】:

  • 对了,我的方法2中arr的数据类型是什么?
  • @AhsanulHaque 在您的方法 2 中,arr 只是一个字符串。使用declare -p arr 进行检查。
猜你喜欢
  • 2021-10-12
  • 2020-09-15
  • 1970-01-01
  • 2013-05-19
  • 2010-12-28
  • 1970-01-01
  • 1970-01-01
  • 2019-12-23
  • 1970-01-01
相关资源
最近更新 更多