代码之家  ›  专栏  ›  技术社区  ›  Grzegorz Wierzowiecki

Bash:Take参数或read-p提示它

  •  0
  • Grzegorz Wierzowiecki  · 技术社区  · 7 年前

    我可以做一些如果-否则

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

    然而,我想知道是否可以将它与一些较短的语法结合起来,例如

    x=${1:-foo}
    

    还有比“如果”更简洁的方法吗?或者,如果——否则该怎么办?

    3 回复  |  直到 7 年前
        1
  •  2
  •   William Pursell    7 年前

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

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

    这只允许使用单行输入,但这可能是理想的行为。但需要注意的是,整体行为是

        2
  •  2
  •   chepner    7 年前

    使用 $# 检查是否设置了第一个位置参数;使用 -z

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

    添加到 read 命令确保分配了任何用户类型 x ,不带任何前导或尾随空格,也不专门解释任何反斜杠。其实你并不经常 需要

        3
  •  0
  •   hedgar2017    7 年前

    这很简洁:

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

    如果需要默认值,那么第二个解决方案也足够“害羞”。