我有一长行是 git 命令的输出:a=$(git submodule foreach git status)
。它看起来像这样:a =“输入'目录1/子目录' 在分支 master 上您的分支已更新为“origin/master”。没有什么可提交的,工作树干净输入'目录2' HEAD 在 xxxxxx 处分离,无需提交任何内容,工作树干净输入'目录3' 在分支 master 上您的分支已更新为“origin/master”。没有什么可提交的,工作树干净输入'目录4' 在分支 master 上您的分支已更新为“origin/master”。没有什么可承诺的,工作树干净”
我想将它分成一个数组:
ARR[0] = "'目录1/子目录’关于分部主...”
ARR[1] = "'目录2’头脱离了……”
ETC。
为此,我尝试用“Entering”代替符号(我尝试过 # $ % & \t ...),并且a=${a//Entering /$}
它工作正常。然后,我尝试使用 IFS 并读取将其分成数组:IFS='$' read -ra ARR <<< "$a"
这就是我面临问题的地方。
我得到的输出echo ${ARR[@]}
是“Dir1/Subdir1”,所以我认为读取受到空格或 git 输出方式的影响,但我不明白发生了什么以及如何修复它。您能给我一些建议吗?
谢谢。
答案1
您可以使用readarray
bash 内置命令并在同一命令中指定分隔符:
readarray -d 'char delimiter' array <<< $variable
例如:
readarray -d '@' array <<< ${a//Entering /@}
最后,当您打印每个结果时,您可能需要删除@
(或用作分隔符的任何其他字符):
echo ${array[1]%@}
echo ${array[2]%@}
echo ${array[@]%@}
如果您想删除索引0
(因为它包含@
),您可以通过将项目从索引复制到最后一个索引来重新分配数组1
:
array=("${array[@]:1}")
提示:如果您想避免${array[index]%@}
每次想要获取某些项目时都使用该数组,可以通过删除@
with 来重新分配数组:
array=("${array[@]/@}")