[英]bash: passing format information into printf
我有一個帶有通用用法/錯誤函數的腳本,它會輸出錯誤,然后給出腳本用法信息。 為了討論這個例子,我把它減少了:
usage() {
test -n "$1" && printf "\n %s" "$1" >&2
}
usage "Error: text1 \ntext2 \ntext3"
這會產生輸出:
Error: text1 \ntext2 \ntext3
我希望每組文本都在一個單獨的行上。 我怎么做?
您可以使用%b
格式:
usage() { [[ $@ ]] && printf "%b\n" "$@"; }
並稱之為:
usage "Error: text1 \ntext2 \ntext3"
輸出:
Error: text1
text2
text3
根據help printf
:
%b expand backslash escape sequences in the corresponding argument
只需刪除格式字符串:
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
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.