Bash: 取参数或读取-p 提示它

Bash: Take argument or read -p prompt it

最优雅的方法是什么:获取提供的参数或 "read -p prompt" 以防丢失?

我可以做一些 if--else

if [ -z "" ]; then
    read -p "supply x:" x
else
    x=""
fi

但是,我想知道我是否可以以某种方式将它与一些更短的语法结合起来,比如

x=${1:-foo}

有没有比 if--else 更简洁的方法?或者它如果--否则怎么走?

这很简洁:

[[ -n "" ]] && x="" || read -p "supply x:" x

如果您需要默认值,您的第二个解决方案也 'bashy' 足够了。

使用$#检查是否设置了第一个位置参数;使用 -z 排除了将空字符串作为参数传递的能力:

if (( $# < 1 )); then
    IFS= read -rp "supply x: " x
else
    x=
fi

read 命令的添加确保无论用户键入什么都被 准确地 分配给 x,而不会去除任何前导或尾随空格或解释特别是任何反斜杠。实际上,您并不经常需要这个,但这是一个很好的做法。

我衷心反对这样做,因为正确的行为是提供默认值或以错误消息终止,但如果您坚持这样做,您可以使用:

x=${1-$(read -p prompt: v; echo "$v")}

这只允许使用单行输入,但这可能是理想的行为。需要注意的是,整体行为 可取!这是一件很糟糕的事情!