【问题标题】:bash yes no functionbash是没有功能
【发布时间】:2013-03-06 07:36:04
【问题描述】:

我的脚本中有很多是/否的答案。 如何创建函数以最小化脚本的大小?

我有以下几点:

function ask {
    read -n 1 -r
    if [[ $REPLY =~ ^[Yy]$ ]]
    then
            return 1;
    else
            exit
            echo "Abort.."
    fi
}

ask "Continue? [y/N] "

它工作正常。但是问题“继续?[y/N] 没有显示。我怎样才能将这个文本“转移”到我的函数中

【问题讨论】:

    标签: bash function prompt


    【解决方案1】:

    您可以使用 $1 变量:

    function ask {
        echo $1        # add this line
        read -n 1 -r
        if [[ $REPLY =~ ^[Yy]$ ]]
        then
                return 1;
        else
                exit
                echo "Abort.."
        fi
    }
    

    编辑:正如@cdarke 所指出的,由于读取中的“-p”开关,可以避免“回声”调用:

    # echo $1
    # read -n 1 -r
    read -n 1 -r -p "$1"
    

    【讨论】:

    • 哦,那很简单。非常感谢! :)
    • 你不需要回显,Bash 中的read 有一个-p 选项来给出提示。 read也可以在ksh中提示,不过语法是var?prompt
    • @cdarke 是的,但它也与 ksh/zsh coproc 读取选项冲突,这就是我通常建议反对它的原因。 Bash 中的-p-e 结合使用会有一些优势,否则它相当于printf %s 'prompt' >&2,否则我会说更好。
    • 至少,您需要切换exitecho "Abort.." 的顺序,因为现在您不会到达echo 语句。另外,请考虑您是真的想退出,还是只想退出return 0。此外,用 shell 的说法,return 1 表示某种失败,而不像大多数编程语言那样正确,因此您可能想要更改它,以便在$REPLY 是时返回 0,否则返回 1。
    • @omaaj:很久以前我就放弃了在 shell 之间移植的尝试,它们在细节上差别太大了。我更喜欢使用 shell 擅长的功能,而不是最小的公分母。除非您的平台仅支持一个 shell,否则我认为尝试编写通用脚本没有什么好处。 Android 可能就是一个例子,使用 MKSH(并忽略 SL4A)。
    猜你喜欢
    • 2022-08-03
    • 2021-06-14
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    • 2014-08-30
    • 2020-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多