【问题标题】:Suggest answer to user input in bash scripting建议对 bash 脚本中的用户输入的回答
【发布时间】:2010-12-18 20:26:17
【问题描述】:

这是一个例子:

#!/bin/bash
echo -e "Enter IP address: \c"
read
echo $REPLY

但我想让用户更容易回答。我想为用户提供一个答案。它应该看起来像这样:

输入你的IP:192.168.0.4

用户可以直接回车同意192.168.0.4,也可以删除一些字符(例如删除“4”加一个退格,然后输入3)。​​

如何进行这样的输入?在 bash 中可以吗?

【问题讨论】:

    标签: bash user-input


    【解决方案1】:

    bash 的 read 支持 readline(编辑:Jonathan Leffler 建议也将提示放入 read)

    #!/bin/bash
    read -p "Enter IP address: " -e -i 192.168.0.4 IP
    echo $IP
    

    【讨论】:

    • 为什么不全力以赴使用:read -p "Enter IP address: " -i 192.168.0.4 -e IP
    • 很高兴了解-i。可能还想将默认 IP 抽象为变量。
    • 很高兴知道将 -e-i 组合以预填充回复缓冲区,但请注意 -i 需要 Bash 4.0 或更高版本(OSX 用户自 OSX 10.10 起使用股票 Bash bash 3.2.57 版本不走运)。
    【解决方案2】:

    我这样做的方法是在括号中的提示中建议默认值,然后使用 默认值 参数扩展将IP 设置为 192.168.0.4(如果他们只是按 Enter),否则它将具有他们输入的值。

    #!/bin/bash
    default=192.168.0.4
    read -p "Enter IP address [$default]: " IP
    IP=${IP:-$default}
    echo "IP is $IP"
    

    输出

    $ ./defip.sh
    Enter IP address [192.168.0.4]:
    IP is 192.168.0.4
    
    $ ./defip.sh
    Enter IP address [192.168.0.4]: 192.168.1.1
    IP is 192.168.1.1
    

    【讨论】:

    • 干得好;如果您的 Bash 版本 -e -i 的下一个最佳选择。我建议在您的示例中使用不同的变量名,因为 REPLY 具有特殊含义:如果您执行 not 指定回复变量名称,其值设置为输入的原始值,包括任何空格。
    • 对我来说,这比-e -i 干净得多,因为它会清除屏幕上的输入。
    【解决方案3】:

    做大部分你想做的事情的经典方法是:

    default="192.168.0.4"
    echo -e "Enter IP address ($default): \c"
    read reply
    [ -z "$reply" ] && reply=$default
    echo "Using: $reply"
    

    这没有提供编辑选项。

    【讨论】:

    • 嘿,厄运。很好地抽象出默认 IP。
    • 这个也适用于 zsh...
    【解决方案4】:

    编辑并不实用,但通常会执行以下操作:

    echo -e "Enter IP address [$default]: \c"
    read answer
    if [ "$answer" = "" ]; then
         answer="$default"
    fi
    

    【讨论】:

    • 是的。这些方法很好,但无需编辑 :'(\n \n 为什么编辑对我有用:\n 我有一个很大的问题。可能会发生用户犯了一些错误并且用户想查看他的答案。比所有问题都再次询问用户,但自动建议他对每个问题的最后回答。我用户犯了一个小错误(例如在最后一个符号中) - 他可以快速编辑它
    猜你喜欢
    • 1970-01-01
    • 2018-04-01
    • 2023-03-04
    • 2016-11-18
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 2012-12-02
    相关资源
    最近更新 更多