Git 命令中的Bash通配符(*)导致捕获正确的输出

Git 命令中的Bash通配符(*)导致捕获正确的输出,git,bash,glob,Git,Bash,Glob,请原谅标题的措辞,我不知道如何为这个“问题”找到一个吸引人的标题 如果我在终端中运行以下命令(运行MacOS Sierra 10.12.6) git分支--列表[rR]elease* 它产生以下预期结果 * Release-x release-1 release-2 release-3 但是,如果我将以下内容放入bash脚本中 branches=($(git branch --list [rR]elease*)) for branch in "${branches[@]}"

请原谅标题的措辞,我不知道如何为这个“问题”找到一个吸引人的标题

如果我在终端中运行以下命令(运行MacOS Sierra 10.12.6)

git分支--列表[rR]elease*

它产生以下预期结果

* Release-x
  release-1
  release-2
  release-3
但是,如果我将以下内容放入bash脚本中

branches=($(git branch --list [rR]elease*))

for branch in "${branches[@]}"
do
  echo "Found branch $branch"
done
它似乎采用
*
并回显找到的分支和我当前工作目录中的每个文件/目录名

Found branch README.md
Found branch acceptance-test
Found branch build
Found branch build.gradle
Found branch flow.sh
Found branch gradle
Found branch gradle.properties
Found branch gradlew
Found branch gradlew.bat
Found branch performance-tests
Found branch postman
Found branch service
Found branch settings.gradle
Found branch sonar-project.properties
Found branch Release-x
Found branch release-1
Found branch release-2
Found branch release-3
为什么输出不同?目前,这破坏了脚本的逻辑,因为它需要分支。如果可能的话,我希望避免冗余检查(检查这是否是一个实际的分支)扰乱脚本

编辑:我试着引用
*
,它产生了与上面相同的结果

$(git…
在存储到阵列中之前先进行路径名扩展
*branchname
git
中标记当前分支。构建数组
分支时,
git
命令输出中的
*
将扩展到当前目录中的所有文件

您可以使用
set-f
关闭路径名扩展。此外,您必须将
$IFS
设置为一个
,否则带有空格的行将被拆分为更多的项(
*branchname
将变成
*
branchname
):

或者更好的方法是使用
readarray

readarray -t branches < <(git branch --list '[rR]elease*')
readarray -t branches < <(git branch --list '[rR]elease*')
branches=()
while read -r branch; do
    branches+=("$branch")
done < <(git branch --list '[rR]elease*')