Bash标准错误重定向

Bash标准错误重定向,bash,standard-error,Bash,Standard Error,我试图验证用户输入的是数字类型还是非数字类型。如果是数字类型,则它将执行必要的操作,否则它将生成我的设计的错误消息(不是生成的标准错误) 我一直使用的步骤是: 1> 对输入执行数学运算。 echo-n“输入一个数字:”;读一段 现在,如果输入a为数字类型,则操作成功,否则将生成标准错误 输入一个数字:ww expr:非数字参数 我用于重定向标准错误的代码是: tmp=`expr $a / 1` >&2 我还尝试使用以下代码将其重新定向到空文件: tmp=`expr $a / 1`

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

我一直使用的步骤是:

1> 对输入执行数学运算。
echo-n“输入一个数字:”;读一段

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

输入一个数字:ww

expr:非数字参数

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

tmp=`expr $a / 1` >&2
我还尝试使用以下代码将其重新定向到空文件:

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

但错误仍在显示中

必须在内部表达式中重定向stderr:

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

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

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

您的两个示例都是重定向stdout,而不是stderr,因为
前面没有限定符

要抛弃stderr,您需要
2>/dev/null
,因为它是文件描述符2。同样有用的还有将stderr合并到stdout的
2>&1
,以及将stderr和stdout重定向到同一文件的
&file

这一页很好地解释了: