如何在连续多次调用echo时禁止换行

时间:2013-12-25 14:03:13

标签: shell

我为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

1 个答案:

答案 0 :(得分:1)

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

-n命令行选项传递给echo(但是this is not POSIX-compliant,尽管很多shell都会实现它,以及来自coreutils/bin/echo项目,通常在GNU / Linux系统上找到)或使用printf command这样:

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

\\用于格式化目的。)

您也可以使用反引号`...`代替$(...)

另请注意git status本身可能会产生跨越多行的输出,所以我想最明智的做法是让printf在{{1}的输出之前插入换行符所以整个咒语将成为:

git 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 ,)