【问题标题】:Bash standard error redirectionBash 标准错误重定向
【发布时间】:2013-04-13 09:31:40
【问题描述】:

我正在尝试验证用户输入的输入是数字类型还是非数字类型。如果是数字类型,那么它将执行必要的操作,否则它将生成我设计的错误消息(不是生成的标准错误)

我一直使用的步骤是:

1> 对输入执行数学运算。
echo -n "Enter a number : "; read a

现在如果输入 a 是数字类型,则操作成功,否则将生成标准错误。

Enter a number : ww

expr: non-numeric argument

我用来重定向标准错误的代码是:

tmp=`expr $a / 1` >&2

我也尝试使用代码将其重定向到空文件:

tmp=`expr $a / 1` > /dev/null

但错误仍在显示。

【问题讨论】:

    标签: bash standard-error


    【解决方案1】:

    您必须在内部表达式中重定向标准错误:

    tmp=`expr $a / 1 2>/dev/null`
    

    【讨论】:

      【解决方案2】:

      用正则表达式代替输入怎么样?

      read a
      if [[ $a =~ ^[0-9]+$ ]]
      then
        echo this is a number
      else
        echo not a number
      fi
      
      • ^ 表示字符串的开始
      • $ 表示字符串结束
      • [0-9]+ 表示一个数字出现 1 次或多次
      • =~ 是语法 Bash regular expression

      【讨论】:

        【解决方案3】:

        您的两个示例都重定向标准输出,而不是标准错误,因为在> 之前没有限定符

        要丢弃 stderr,您需要 2> /dev/null,因为它是文件描述符 2。2>&1 也很有用,用于将 stderr 合并到 stdout 和 &> file,将 stderr 和 stdout 重定向到同一个文件的简写。

        这个页面解释得很好:http://www.tldp.org/LDP/abs/html/io-redirection.html

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-10-12
          • 1970-01-01
          • 2015-06-02
          • 2013-11-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多