Bash多行输出带空格,作为数组变量

3

我在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]};
< p > azure命令的输出如下:

Visual Studio Ultimate with MSDN
Microsoft Partner Network
< p > echo 命令的值为:

Visual Studio Ultimate with MSDN Microsoft Partner Network

我希望您能够将echo命令的输出预期为:
```text

我期望echo命令的输出结果是:

```
Visual Studio Ultimate with MSDN

变量名为sublist的应该是一个数组,包含两个元素:
[0] Visual Studio Ultimate with MSDN
[1] Microsoft Partner Network

我真正困扰的部分是让每一整行,包括其中的空格,被视为一个单独的字符串。我尝试了许多第二行的变体,其中我将命令输出分配给sublist变量,但都没有找到可以运行的变体。

1个回答

6
你声明了一个数组sublist,但你只给第一个元素赋值(sublistsublist[0]在大多数情况下是同义词)。在 4中,你可以使用readarray命令:
readarray -t sublist < <(azure account list --json | jsawk 'return this.name' -a 'return this.join("\n")')

在 4之前,你需要一个循环来逐个分配每个元素:

while IFS= read -r line; do
    sublist+=( "$line" )
done < <(azure ...)

1
这是一个进程替换。azure的输出被视为文件,通过正常的输入重定向,readarray命令或循环从中读取。我使用它来代替管道(azure ... | readarrayazure ... | while ...; do ... ; done),以便sublist在当前shell中设置,而不是子shell中。 - chepner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接