假设我有一个KSH函数返回其参数的总和,但是如果没有提供参数,它会提示用户输入:
#!/bin/ksh
sum() {
typeset v1=$1
typeset v2=$2
test -z "$v1" && { printf "please enter v1: "; read v1; }
test -z "$v2" && { printf "please enter v2: "; read v2; }
echo $((v1+v2))
}
我想将此函数的结果赋给变量,通常我会这样做
typeset result=`sum 3 4`
echo $result # 7
但是当我使用提示版
时typeset result=`sum`
echo $result
它有2个不受欢迎的效果:首先不显示提示消息please enter ...
,其次,result
将包含文本please enter ...
而不仅仅是数字。
$ typeset result=`sum`
$ 1
$ 2
$ echo $result
please enter v1: please enter v2: 3
如何编辑函数sum
,这样当没有提供参数时,它会将提示消息please enter ...
打印到stdout而不是返回result
变量?< /强>
答案 0 :(得分:1)
首先,我必须表示在这样的函数中间提示输入是一个可怕的想法。但是,如果您要这样做,您可以将提示打印到stderr或/ dev / tty
sum() {
typeset v1=$1
typeset v2=$2
test -z "$v1" && { printf "please enter v1: " >&2; read v1; }
test -z "$v2" && { printf "please enter v2: " > /dev/tty; read v2; }
echo $((v1+v2))
}
或者,使用read -p
读取打印提示给stderr。 (即test -z "$v1" && read -p "Please enter v1: " v1
)