0

我正在尝试从 GitHub 创建一组已打开的问题编号。我正在使用以下命令来提取我们在特定回购和标签中拥有的所有打开的问题编号:

issueNumList=$(gh issue list -R <repo name> -l "label" | cut -f1)

问题是我无法从 issueNumList 中读取列表(显然)。我尝试通过运行此命令将它变成一个数组,但它只获得第一个数字:

IFS=' \n' read -ra issuesArray <<< "${issueNumList[0]}"

我尝试更改此命令几次,但我没有看到输出有任何差异。这是我得到的输出:

$ echo ${issueNumList[0]}
1684 1683 1681 1680 1679 1678 1677 1676 1675 1674 1673 1672 1671 1670 1669 1668 1667
$ echo ${issueNumList[@]}
1684 1683 1681 1680 1679 1678 1677 1676 1675 1674 1673 1672 1671 1670 1669 1668 1667
$ echo "${issueNumList[0]}"
1684
1683
1681
1680
1679
1678
1677
1676
1675
1674
1673
1672
1671
1670
1669
1668
1667
$ echo ${issuesArray[@]}
1684
$ echo ${issuesArray[0]}
1684
$ echo ${issuesArray[1]}

$ echo ${issuesArray[2]}

从这些输出中,我了解到在 and 中只有一个点,issueNumList并且issuesArray从第三个输出中,我认为这意味着每个数字的末尾都有 \n。

4

1 回答 1

1

如何将第一个命令的输出转换为数组?

issueNumList不是一个数组 - 使用[0]它没有意义。

read一直读到换行。将分隔符指定为零字节,然后您可以读取换行符分隔的列表。也是'\n'两个字符\n,它不是换行符,您可以使用 ANSI C 引用$'\n'来获取换行符。

issueNumList=$(gh issue list -R <repo name> -l "label" | cut -f1)
IFS=$' \n' read -d '' -r -a issuesArray <<<"$issueNumList"

但是bash中的行读入数组的方法是readarray

readarray -t issuesArray <<<"$issueNumList"

要调试变量内容,请使用declare -p、likedeclare -p issuesArraydeclare -p issueNumList.

于 2021-05-19T11:04:40.833 回答