我正在尝试验证用户输入的输入是数字类型还是非数字类型。如果是数字类型,那么它将执行必要的操作,否则它将生成我的设计的错误消息(而不是生成的标准错误)
我一直在使用的步骤是:
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
但错误仍在显示中。
答案 0 :(得分:4)
您必须在内部表达式中重定向stderr:
tmp=`expr $a / 1 2>/dev/null`
答案 1 :(得分:2)
输入正则表达式怎么样?
read a
if [[ $a =~ ^[0-9]+$ ]]
then
echo this is a number
else
echo not a number
fi
^
表示开始字符串$
表示字符串结尾[0-9]+
表示一个或多个出现的数字=~
是语法
Bash regular expression 答案 2 :(得分:2)
你的两个例子都重定向stdout,而不是stderr,因为 >
之前没有限定符。
要丢弃stderr,你需要2> /dev/null
,因为它是文件描述符2.同样有用的是2>&1
,将stderr合并到stdout,而&> file
,简写来重定向stderr和stdout到同一个文件。
此页面解释得非常好:http://www.tldp.org/LDP/abs/html/io-redirection.html