【发布时间】:2020-06-29 22:44:56
【问题描述】:
仅使用适用于 bash 和 zsh 的内置函数将 csv 字符串拆分为数组的最简单方法是什么?
我有单独的代码适用于 bash 和 zsh,但我还没有找到任何适用于两者的代码:
csv='a,b,c'
# Works in zsh, but not in bash
array=(${(s:,:)csv})
# Works in bash, but not in zsh
array=(${csv//,/ }) # This requires that $IFS contains the space character
【问题讨论】:
-
为了避免不加引号的扩展,Bash 方法应该是
IFS=, read -a array <<< "$csv"——不知道这是否适用于 zsh。 -
在
zsh中是IFS=, read -rA arr <<< "$csv" -
啊,好吧——无论如何,对于 Bash 版本应该仍然如此;)
-
@XDR :你为什么要编写对两种完全不同的编程语言工作相同的代码?您的代码很可能驻留在脚本中,该脚本(通过 #! 行)指定它是 bash 还是 zsh,即它不会被获取,不是吗?我看不出强制程序能够在两个 shell 上运行的意义。
-
它将被采购。现有代码与 bash 和 zsh 都兼容,所以我必须保持兼容。这不是我的决定。
标签: arrays string bash split zsh