Bash正则表达式测试的工作方式相反吗?

时间:2014-03-13 19:19:06

标签: regex bash if-statement conditional

我写了一个小的bash脚本来检查机器的架构:

#!/bin/bash

v=$(uname -m)
echo $v

if [[ $v  =~ ".*64.*" ]] ; then
  echo "64 bits!"
else 
  echo "32 bits!"
fi

在我的机器上启动:

$ uname -m
x86_64

那么为什么我会得到这个结果呢?

$ ./test.sh
x86_64
32 bits!

1 个答案:

答案 0 :(得分:3)

如果你拿出引号就行了。

if [[ $v  =~ .*64.* ]] ; then

Bash在正则表达式的支持下很挑剔;引用之类的东西会产生重大且有时会产生意想不到It has also changed between Bash versions

如果您不需要完整的正则表达式支持,可写的便携式方法是

case $v in *64*) echo 64 bits ;; *) echo 32 bits;; esac

这可以一直移植回原来的v7 Bourne shell。