【问题标题】:Bash Regex Accepts [Number], but i want only Number acceptedBash Regex 接受 [数字],但我只希望接受数字
【发布时间】:2017-06-05 15:21:28
【问题描述】:

我有一些问题,我不知道是什么原因造成的。在我的脚本(bash)中,我想用“if”询问我的 $1 是否是一个数字。只有 0-9 位和可选的“-”。 当我做

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

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

两次我都能做到

`./myscript [number]`

./myscript number*

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

谁能告诉我我的问题在哪里?我只想了解为什么 bash 会这样。我不想剪掉一些完整的代码来解决我的问题。只有一些想法是导致问题的原因 问候

【问题讨论】:

  • 你能展示你的代码吗?

标签: regex linux bash shell unix


【解决方案1】:

我猜在当前目录中你有一个名为 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

【讨论】:

  • 谢谢!问题是 [1] 似乎是 Bash 中的测试。通过将其设为“[1]”,它不会给我一个数字。非常感谢!
  • [1] 是一个模式,就像*.txt 一样,受路径名扩展的影响。
猜你喜欢
  • 1970-01-01
  • 2021-12-15
  • 2011-04-17
  • 1970-01-01
  • 2021-10-28
  • 1970-01-01
  • 1970-01-01
  • 2013-10-16
  • 1970-01-01
相关资源
最近更新 更多