Bash Regex接受[Number],但我只想接受Number

时间:2017-06-05 15:21:29

标签: regex linux bash shell unix

我有一些问题,我不知道是什么原因造成的。在我的脚本(bash)中我想问"如果"如果我的1美元是一个数字。只有0-9位和optinal" - "。 我做的时候

`if [[ "$1" -eq "$1" ]]` 

 if `([[ $1 =~ ^-?[0-9]+$ ]]`

我可以做两次

`./myscript [number]`

./myscript number*

并且号码被接受了。但当然我不希望[number]成为一个数字作为参数。只有没有任何其他符号,括号或其他内容的数字

有人能告诉我我的问题在哪里吗?我只想理解为什么bash就像这样。我不想要一些完整的代码剪切来解决我的问题。只有一些想法导致问题 问候

1 个答案:

答案 0 :(得分:4)

我想在当前目录中你有一个名为number的文件。请参阅下面的日志:

[arturcz@home xxx]$ ls -la
total 4
drwxr-xr-x  2 arturcz arturcz  60 Jun  5 16:27 .
drwxrwxrwt 16 root    root     580 Jun  5 16:27 ..
-rwxr-xr-x  1 arturcz arturcz  88 Jun  5 16:24 number.sh
[arturcz@home xxx]$ cat number.sh
#!/bin/bash
if [[ $1 =~ ^-?[0-9]+$ ]]; then
    echo Number
else
    echo Not number
fi
[arturcz@home xxx]$ ./number.sh 1
Number
[arturcz@home xxx]$ ./number.sh [1]
Not number
[arturcz@home xxx]$ ./number.sh 1*
Not number
[arturcz@home xxx]$ touch 1
[arturcz@home xxx]$ ./number.sh [1]
Number
[arturcz@home xxx]$ ./number.sh 1*
Number
[arturcz@home xxx]$

如果你想避免用bash解释和扩展参数,请用单引号或双引号输入:

[arturcz@home xxx]$ ./number.sh '1*'
Not number
[arturcz@home xxx]$ ./number.sh '[1]'
Not number