我在Mac OS X上的Bash 3.2上遇到命令输出的问题。我有一个输出多行字符串的命令。字符串的每一行在值中都有空格。
我想将每个值分配给数组变量的元素。
我有以下脚本:
declare -a sublist; sublist=`azure account list --json | jsawk 'return this.name' -a 'return this.join("\n")'`; echo ${sublist[0]};
该azure
命令的输出为:
Visual Studio Ultimate with MSDN Microsoft Partner Network
该echo
命令的值是:
Visual Studio Ultimate with MSDN Microsoft Partner Network
我期望 echo命令的输出是:
Visual Studio Ultimate with MSDN
命名的变量sublist
应该是一个包含两个元素的数组:
[0] Visual Studio Ultimate with MSDN [1] Microsoft Partner Network
我真正挣扎的部分是将每一行,包括空格,都视为一个字符串。我已经尝试了第2行的许多变体,在该变体中,我将命令输出分配给了sublist
变量,但没有找到一个可行的方法。
您声明sublist
是一个数组,但仅分配给第一个元素(sublist
并且sublist[0]
在大多数情况下是同义词)。在bash
4,你可以使用readarray
命令:
readarray -t sublist < <(azure account list --json | jsawk 'return this.name' -a 'return this.join("\n")')
在bash
4 之前,您需要一个循环来一次为每个元素分配一个:
while IFS= read -r line; do sublist+=( "$line" ) done < <(azure ...)