【问题标题】:How to make KSH function return only some echo message如何使 KSH 函数只返回一些回显消息
【发布时间】:2016-04-16 05:12:22
【问题描述】:

假设我有一个返回其参数总和的 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

它有两个不良影响:第一,提示消息please enter ... 不显示,第二,result 将包含文本please enter ... 而不仅仅是数字。

$ typeset result=`sum`
$ 1
$ 2
$ echo $result
please enter v1: please enter v2: 3

如何编辑函数sum,以便在未提供参数时将提示消息please enter ... 打印到标准输出,而不是返回result 变量?

【问题讨论】:

    标签: shell unix stdout ksh


    【解决方案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 将提示打印到标准错误。 (即test -z "$v1" && read -p "Please enter v1: " v1

    【讨论】:

    • 你的话击中了我。我已经体验过它为什么可怕了;您必须在大多数代码行中关注它是否可以提示输入。因此,我保留了您的建议,并尝试重构程序以仅在门户功能中提示输入。
    猜你喜欢
    • 2014-08-17
    • 1970-01-01
    • 2011-08-18
    • 1970-01-01
    • 2019-09-15
    • 1970-01-01
    • 2011-11-25
    • 2014-01-03
    • 2012-02-22
    相关资源
    最近更新 更多