在 ZSH 中剪切不会从子 shell 中剪切 git 输出

cut in ZSH doesn't cut git output from a subshell

上下文:我正在制作一个 shell 函数以更人性化的方式输出 git rev-list 信息(受 this answer 启发)。

但我因无法解释的意外行为而受阻。这是一个例子:

REVLIST="$(git rev-list --left-right --count main...fix/preview-data)"

# just to check what the variable contains
$echo \"$REVLIST\" # outputs "57     0"

# This is the unexpected behavior: cut didn't work
echo $(echo "$REVLIST" | cut -d " " -f 6) commits ahead.
# This prints: 57 0 commits ahead. It should print 0 commits ahead.
# note also the single space between 57 and 0. In the echo above there are 5 spaces.

我尝试在子 shell 中不使用 git 复制它,然后它按预期工作:

REVLIST="$(echo "57     0")"
echo $(echo "$REVLIST" | cut -d " " -f 6) commits ahead.
# this prints as expected: 0 commits ahead.

我尝试 adding/removing 引号来回显命令和变量赋值。我还尝试使用 <<< 运算符而不是管道,例如cut -d " " -f 6 <<< "$REVLIST"。这些尝试没有奏效。

我不确定哪里出了问题,也不知道如何做到 运行 符合预期。是subshell吗?是 git 输出吗?我使用 echo/piping 不正确吗?

我正在使用 5.7.1 版的 ZSH。

更新:附加上下文

回答 KamilCuk 关于这个问题的问题:

REVLIST="$(git rev-list --left-right --count main...fix/preview-data)"
echo "$REVLIST" | hexdump -C

this prints:

00000000  35 37 09 30 0a                                    |57.0.|
00000005

REVLIST="$(echo "57     0")"
echo "$REVLIST" | hexdump -C

this prints:

00000000  35 37 20 20 20 20 20 30  0a                       |57     0.|
00000009

输出有一个制表符,而不是 6 个空格。

刚刚

cut -f2 <<<"$REVLIST"

cut 的默认分隔符是制表符。