Git 命令中的Bash通配符(*)导致捕获正确的输出
请原谅标题的措辞,我不知道如何为这个“问题”找到一个吸引人的标题 如果我在终端中运行以下命令(运行MacOS Sierra 10.12.6)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[@]}"
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*')