如何禁止连续多次调用回声时的换行符



我已经为 Git 创建了一个别名:

alias gtbs='echo on Branch; git rev-parse --abbrev-ref HEAD; echo last Modified; git status -s;'

但这会在换行符上打印每个输出

喜欢

on Branch:
develop
Added/Modified:
 M scripts/myscript

而相反,我只想在一行中

on Branch: develop, Added/Modified: M scripts/myscript

echo 命令添加一个隐式换行符,您正在观察该换行符。

要么将-n命令行选项传递给echo(但这不符合 POSIX,尽管许多 shell 实现了它,以及来自 GNU/Linux 系统上的 coreutils 项目的/bin/echo),或者像这样使用 printf 命令:

printf 'on branch: %s, last modified: %s' 
    $(git rev-parse --abbrev-ref HEAD) $(git status -s)

(此处\用于格式化目的。

您还可以使用反引号`...`而不是$(...)

另请注意,git status本身可能会产生跨越多行的输出,因此我认为最明智的做法是要求printfgit status输出之前插入换行符,因此整个编码将变为:

printf 'printf 'on branch: %s, last modified:n' 
    $(git rev-parse --abbrev-ref HEAD) && git-status -s

如果出于某种原因,您确实想让git status -s输出一行,则可能需要从中删除任何换行符:

printf '...last modified: %s' $(git status -s | paste -sd ,)

...如果你想要多字符分隔符,最后一个编码会变得更加复杂:

$(IFS=n git-status -s | while read line; do printf '%s; ' "$line"; done)

最新更新