如何使 KSH 函数 return 只有一些回显消息
How to make KSH function return only some echo message
假设我有一个 KSH 函数 return 其参数的总和,但如果未提供参数,它会提示用户输入:
#!/bin/ksh
sum() {
typeset v1=
typeset v2=
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 ...
打印到标准输出而不是 return result
变量?
首先,我必须说明,在这样的函数中间提示输入是一个糟糕的主意。但是如果你打算这样做,你可以将提示打印到 stderr 或 /dev/tty
sum() {
typeset v1=
typeset v2=
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
)
假设我有一个 KSH 函数 return 其参数的总和,但如果未提供参数,它会提示用户输入:
#!/bin/ksh
sum() {
typeset v1=
typeset v2=
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 ...
打印到标准输出而不是 return result
变量?
首先,我必须说明,在这样的函数中间提示输入是一个糟糕的主意。但是如果你打算这样做,你可以将提示打印到 stderr 或 /dev/tty
sum() {
typeset v1=
typeset v2=
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
)