我想创建一个多次使用基本(提示和确认)函数的脚本,当我尝试将返回值设置为任何变量时,该函数忽略参数
function promp() {
echo $*
read response
echo $response
}
function confirm() {
echo $*
read -rp $'(y/N) : ' -ei $'N' key;
case "$key" in
[yY][eE][sS]|[yY])
echo true
;;
*)
echo false
;;
esac
}
IS_RESPONSE=$(confirm "SOME QUESTION")
STRING_RESPONSE=$(promp "WRITE SOMETHING")
echo $IS_RESPONSE
echo $STRING_RESPONSE
预期:
SOME QUESTION
(y/N) : N
WRITE SOMETHING
#<< "some text"
false
some text
获得:
(y/N) : N
#<< "some text"
SOME QUESTION false
WRITE SOMETHING some text
我知道问题是函数内的回显是可变数据的一部分,但我想打印出来。
我该怎么做或者哪种方法最好
最佳答案
您的函数在 command substitution 的上下文中被调用:
STRING_RESPONSE=$(promp "WRITE SOMETHING")
因此 promp "WRITE SOMETHING"
命令的标准输出附加到变量赋值的上下文中。
但是,标准错误仍然附加到终端。如果您将 echo
的输出重定向到文件描述符 2
,那么当 echo
被调用时,输出将显示给用户,例如:
function promp() {
echo >&2 "$*"
read response
echo "$response"
}
另一种方法是使用-p
选项:read -p "Your prompt: "
which prints the prompt string to the standard error
关于linux - bash 没有 $(函数参数) 的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44443469/