我正在使用
从文件中读取数字x= egrep "(^[0-9][0-9])" temp1
但是当我在case语句中使用这些数字时,它总是会失败:
case $x in
[0-9])
statements;;
[0-9][0-9]
statements;;
esac
当我回复它看起来很好的数字时,我不确定它为什么不起作用。
答案 0 :(得分:1)
bourne / bash case-statement匹配整个字符串,而egrep(在您的示例中)仅匹配前导字符。
在您的示例中,您将case语句更改为:
case "$x" in
[0-9][0-9]*)
statements;;
[0-9]*)
statemtns;;
*)
statements for unmatched....
esac
请注意,我颠倒了顺序,因为第一场比赛将生效。另外,我引用$ x因为我是偏执狂;)如果它可能有你想要忽略的前导空格,你可以省略$ x上的引号。
答案 1 :(得分:0)
等号后面的空格没有进程替换使x
为空。这可能就是您case
无效的原因。
您可以使用-o
选项egrep
来确保只获得您感兴趣的字符串。
x=$(egrep -o "(^[0-9][0-9])" temp1)
case $x in
[0-9])
statements;;
[0-9][0-9]
statements;;
esac
答案 2 :(得分:0)
取决于你想做什么,你可以用awk
来做awk '/^[0-9][0-9]/'{
#do something
}' temp1
或使用bash
while read -r line
do
case $line in
[0-9][0-9]* ) echo "do something ;;
[0-9]* ) echo "do something";;
* ) echo "do something";;
esac
done <"temp1"