我有一些问题,我不知道是什么原因造成的。在我的脚本(bash)中我想问"如果"如果我的1美元是一个数字。只有0-9位和optinal" - "。 我做的时候
`if [[ "$1" -eq "$1" ]]`
或
if `([[ $1 =~ ^-?[0-9]+$ ]]`
我可以做两次
`./myscript [number]`
或
./myscript number*
并且号码被接受了。但当然我不希望[number]成为一个数字作为参数。只有没有任何其他符号,括号或其他内容的数字
有人能告诉我我的问题在哪里吗?我只想理解为什么bash就像这样。我不想要一些完整的代码剪切来解决我的问题。只有一些想法导致问题 问候
答案 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