如何导出变量unixshell脚本
我正在尝试使用egrep和regex验证输入 如果我将echo管道传输到egrep,它会工作,但它也会在屏幕上打印变量,这是我不需要的。您可以使用awk如何导出变量unixshell脚本,shell,unix,csh,Shell,Unix,Csh,我正在尝试使用egrep和regex验证输入 如果我将echo管道传输到egrep,它会工作,但它也会在屏幕上打印变量,这是我不需要的。您可以使用awk $ echo "1234" | awk '{print $1+0==$1?"ok":"not ok"}' ok $ echo "123d4" | awk '{print $1+0==$1?"ok":"not ok"}' not ok 你可以用awk $ echo "1234" | awk '{print $1+0==$1?"ok":"not
$ echo "1234" | awk '{print $1+0==$1?"ok":"not ok"}'
ok
$ echo "123d4" | awk '{print $1+0==$1?"ok":"not ok"}'
not ok
你可以用awk
$ echo "1234" | awk '{print $1+0==$1?"ok":"not ok"}'
ok
$ echo "123d4" | awk '{print $1+0==$1?"ok":"not ok"}'
not ok
要简单地抑制输出,可以将其重定向到空设备
echo $1 | egrep '^[0-9]+$' >/dev/null
if ($status == 0) then
set numvar = $1
else
echo "Invalid input"
exit 1
endif
您可能还想考虑使用<代码> -c>代码>选项来获得匹配的计数,而不是使用状态。
此外,除非您使用的是
csh
,否则状态存储在$?
中,而不是$status
中。为了简单地抑制输出,您可以将其重定向到空设备
echo $1 | egrep '^[0-9]+$' >/dev/null
if ($status == 0) then
set numvar = $1
else
echo "Invalid input"
exit 1
endif
您可能还想考虑使用<代码> -c>代码>选项来获得匹配的计数,而不是使用状态。
另外,除非您使用的是
csh
,否则状态存储在$?
中,而不是$status
grep
中有一个-q
选项禁止输出
因此:
grep
有一个抑制输出的-q
选项
因此:
谢谢,但我更喜欢白鹭,只是因为我不知道它叫什么。我可能会在将来给它,但现在我没有时间学习。谢谢,但我更喜欢白鹭,只是因为我不知道awk。我可能会在将来给出它,但现在我没有时间学习它。我按照您的建议使用了-c选项,并且我还设置了新变量以在if语句中使用。set temp=
echo$1 | egrep-c'^[0-9]+$'
如果($temp!=0),那么在csh中,退出状态确实存储在$status
中,我添加了一个关于csh的说明,并将添加一个csh标记。我按照您的建议使用了-c选项,并且我还设置了要在if语句中使用的新变量。set temp=echo$1 | egrep-c'^[0-9]+$”
如果($temp!=0),那么在csh中,退出状态确实存储在$status
中,我添加了一个关于csh的说明,并将添加一个csh标记。手册页上说:“便携式shell脚本应该避免-q和-s,应该将标准和错误输出重定向到/dev/null。(-s由POSIX指定。)“@Dennis-关于可移植性问题,你是对的。实际上,-s和-q选项都是由POSIX指定的。在这里,-q选项的作用与我使用它的方式相同,-s选项会抑制错误消息。请参阅可移植shell脚本可能不会在CSH中编写手册页上说:“可移植shell脚本应避免-q和-s,并应将标准和错误输出重定向到/dev/null。(-s由POSIX指定。)“@Dennis-关于可移植性问题,你是对的。实际上,-s和-q选项都是由POSIX指定的。在这里,-q选项的作用与我使用它的方式相同,-s选项会抑制错误消息。请参阅,可移植shell脚本可能不会用csh编写