Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 将csv字符串拆分为既适用于bash又适用于&;的数组的最简单方法;zsh_Arrays_String_Bash_Split_Zsh - Fatal编程技术网

Arrays 将csv字符串拆分为既适用于bash又适用于&;的数组的最简单方法;zsh

Arrays 将csv字符串拆分为既适用于bash又适用于&;的数组的最简单方法;zsh,arrays,string,bash,split,zsh,Arrays,String,Bash,Split,Zsh,仅使用适用于bash和zsh的内置程序将csv字符串拆分为数组的最简单方法是什么 我有适用于bash和zsh的单独代码,但我还没有找到任何适用于这两种语言的代码: csv='a、b、c' #在zsh中工作,但在bash中不工作 数组=(${(s:,:)csv}) #可以在bash中工作,但不能在zsh中工作 array=(${csv/,/})#这要求$IFS包含空格字符 正如注释中指出的,有两个几乎相同的命令,每个shell一个 # bash IFS=, read -ra array <&

仅使用适用于bash和zsh的内置程序将csv字符串拆分为数组的最简单方法是什么

我有适用于bash和zsh的单独代码,但我还没有找到任何适用于这两种语言的代码:

csv='a、b、c'
#在zsh中工作,但在bash中不工作
数组=(${(s:,:)csv})
#可以在bash中工作,但不能在zsh中工作
array=(${csv/,/})#这要求$IFS包含空格字符

正如注释中指出的,有两个几乎相同的命令,每个shell一个

# bash
IFS=, read -ra array <<< "$csv"

# zsh
IFS=, read -rA array <<< "$csv"

检查非空版本参数不是万无一失的,但应该足够好。

为了避免无引号的扩展,Bash方法实际上应该是
IFS=,read-a数组,在
zsh
中,它应该是
IFS=,read-rA-arr-Ah-无论如何,对于Bash版本来说都应该是这样;)@XDR:为什么要编写对两种完全不同的编程语言都适用的代码?您的代码很可能驻留在一个脚本中,该脚本(通过#!行)指定它是bash还是zsh,也就是说,它不会被来源,不是吗?我不认为强制程序能够在两个shell上运行有什么意义。它将由源代码提供。现有代码与bash和zsh都兼容,因此我必须保持它的兼容性。这不是我的决定。
IFS=,读-r“${BASH_VERSION:+a}${ZSH_VERSION:+a}”数组True:)但我宁愿将嗅探逻辑与业务逻辑分开。您可能需要考虑其他特定于shell的差异,这些差异都可以在脚本开头的单个
if
语句中设置。
if [ -n "$BASH_VERSION" ]; then
    arr_opt=a
elif [ -n "$ZSH_VERSION" ]; then
    arr_opt=A
fi

IFS=, read -r"$arr_opt" array <<< "$csv"