在 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
的默认分隔符是制表符。
上下文:我正在制作一个 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
的默认分隔符是制表符。