Bash读取输入 - 选中提示

时间:2016-07-01 16:26:56

标签: bash

我有一个脚本,我正在阅读用户的输入。这是我的代码:

if [ -z $volreadexists ]; then
        echo -e "\tThis will overwrite the entire volume (/dev/vg01/$myhost)...are you sure?"
        read REPLY
        echo
        if [[ $REPLY =~ ^[Yy]$ ]]; then
            echo -e "\t\tContinuing"
            syncvolume
        else
            echo "Fine...skipping"
        fi
    fi

我必须使用read REPLY,因为read本身并不会插入标签。我正在寻找的东西类似于:

read -p "\tDoes this look OK? (n for No)" -n 1 -r

\t会在阅读提示上标记。

如何在阅读提示中添加标签?

更新:感谢@gniourf的精彩回答!:

read -p $'\tDoes this look OK? (n for No)' -n 1 -r

然而,我发现了一个问题。当我尝试在那里使用变量时,它并没有翻译它:

read -p $'\tThis will overwrite the entire volume (/dev/vg01/$myhost)...are you sure? ' -n 1 -r

变为

        This will overwrite the entire volume (/dev/vg01/$myhost)...are you sure?

我想要的地方:

        This will overwrite the entire volume (/dev/vg01/server1)...are you sure?

使用双引号也不起作用:(

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

只需使用ANSI-C quoting

read -p $'\tDoes this look OK? (n for No)' -n 1 -r

现在,如果你也想使用变量扩展,你可以混合使用不同的引号:

read -p $'\t'"This will overwrite the entire volume (/dev/vg01/$myhost)...are you sure? " -n 1 -r

这里我只使用了ANSI-C引用标签字符。请确保您不要在$'\t'"This will...."之间留下任何空格。

答案 1 :(得分:0)

我最后引用了这个答案:

Read a variable in bash with a default value

并创建了一个变通方法。它并不完美,但它确实有效:

myhost="server1"
if [ -z $volreadexists ]; then
    read -e -i "$myhost" -p $'\tJust checking if it\'s OK to overwrite volume at /dev/vg01/'
    echo
    if [[ $REPLY =~ ^$myhost[Yy]$ ]]; then
        echo -e "\t\tContinuing"
    else
        echo "Fine...skipping"
    fi
fi