2017-07-29 26 views
0

什么是最优雅的方式:采取提供的参数或“读-p提示”,以防万一丢失?Bash:采取参数或读取-p提示它

我可以做一些,如果 - 否则

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

但是,我不知道是否可以用更短一些莫名其妙的语法结合起来像

x=${1:-foo} 

有没有更简洁的方式比如 - - 是吗?或者如果 - 要走的路?

+0

如果缺少参数,最优雅的做法是提供默认或中止。试图阅读它是一个错误。 –

+0

我更想知道可能的单线球 - 像bash-golf。而不是阅读其他操作,例如,提供的任一参数,以某种方式计算的以太(不一定读取),阅读很简单,例如和玩。谢谢!。 –

回答

1

我对这个全心全意提醒如正确的行为是要么提供一个默认的或者有一个错误消息终止,但如果你坚持这样的怪物,你可以使用:

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

这只允许使用一行输入,但这可能是理想的行为。与警告,整体行为是不是理想!这是一件可怕的事情!

+0

我更想知道可能的单线队员 - 比如bash-golf。而不是阅读其他操作,例如,提供的任一参数,以某种方式计算的以太(不一定读取),阅读很简单,例如和玩。谢谢!。 –

0

这是相当简洁:

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

你的第二个解决方案也是“巴希”不够的,如果你需要一个默认值。

2

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

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

read命令添加确保无论用户类型分配恰好x,没有条带化任何前导或尾随空格或解释任何反斜杠特别。这其实不是你经常需要的这个,但是这是很好的做法。