【发布时间】:2021-08-08 16:50:16
【问题描述】:
我试图理解 if 条件
log_daemon_msg () {
if [ -z "${1:-}" ]; then
return 1
fi
log_daemon_msg_pre "$@"
if [ -z "${2:-}" ]; then
echo -n "$1:" || true
return
fi
echo -n "$1: $2" || true
log_daemon_msg_post "$@"
}
“${1:-}”和“${2:-}”是什么意思
【问题讨论】:
-
顺便说一句,
echo -n "$1:"不是很好的形式——最好写成printf '%s:' "$1" -
另外,关于
set -eu-- 请参阅BashFAQ #105 讨论为什么set -e在认真的shell 开发人员中被认为是一个坏主意,BashFAQ #112 讨论set -u的优缺点(虽然与set -e一样,这不是一个坏主意,但当人们希望未设置的值不会有害时,需要使用${var:-}而不是仅仅使用$var是缺点之一)。 -
@CharlesDuffy 你的第一条评论:为什么?
-
@IMSoP,
echo的 POSIX 标准使-n允许,但不要求它具有任何特定行为。echo -n允许在输出中打印-n,而不是取消换行。 -
@IMSoP 请参阅unix.stackexchange.com/a/65819/3113 进行深入讨论,而the POSIX
echostandard 的应用程序部分推荐printf。
标签: bash if-statement parameter-expansion