我有一个脚本,有一个通用的用法/错误函数,它打印出错误,然后给出脚本使用信息。为了便于讨论,我将其简化为以下示例:
usage() {
test -n "$1" && printf "n %s" "$1" >&2
}
usage "Error: text1 ntext2 ntext3"
输出如下:
Error: text1 ntext2 ntext3
我希望每组文本在单独的行上。我怎么做呢?
您可以使用%b
格式:
usage() { [[ $@ ]] && printf "%bn" "$@"; }
命名为:
usage "Error: text1 ntext2 ntext3"
输出:Error: text1
text2
text3
根据help printf
:
%b expand backslash escape sequences in the corresponding argument
您可以在创建作为参数传递的文字时处理转义序列,通过使用$'...'
语法。
usage $'Error: text1 ntext2 ntext3'
参见ANSI-C引号
删除格式字符串:
usage() {
[[ -n "$1" ]] && printf "$1" >&2
}
usage "Error: text1 ntext2 ntext3"
这还不清楚,但如果你想要一个usage
函数,把每个参数放在自己的行,你可以使用这个代替:
$ usage() {
printf %s\n "$@" >&2
}
$ usage 'Error: text1' text2 text3
Error: text1
text2
text3
或者自己执行循环,并保持usage
不输出任何空参数:
usage() {
for arg; do
printf %s\n "$arg" >&2
done
}
或者借用anubhava的回答:
usage() {
[[ "$@" ]] && printf %s\n "$@" >&2
}
或没有[[
bashism:
usage() {
[ -n "$*" ]] && printf %s\n "$@" >&2
}