bash:防止重定向函数的错误与输出混合

use*_*598 3 bash

想要从函数中获取用户的输入.但是,提示(在这种情况下"请回答y或n.")也包含在返回值中.

#!/bin/bash

input() {
    while true; do
        read -p "input y/n: " yn
        case $yn in
            [Yy]* ) yn="y"; break;;
            [Nn]* ) yn="n"; break;;
            * ) echo "Please answer y or n.";;
        esac
    done

    echo $yn
}

val=$(input)
echo "val is: $val"
Run Code Online (Sandbox Code Playgroud)

如果首先输入错误值,则结果如下:

input y/n: other
input y/n: y
val is: Please answer y or n.
y
Run Code Online (Sandbox Code Playgroud)

谢谢.

Cha*_*ffy 5

将您的错误回显到stderr(FD 2),而不是stdout(默认值,FD 1):

echo "Please answer y or n." >&2
Run Code Online (Sandbox Code Playgroud)