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



我已经写了一个小的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!

去掉引号就行了。

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

Bash对正则表达式支持很挑剔;像引用这样的事情会产生重大的,有时甚至是意想不到的后果。它在Bash版本之间也发生了变化

如果你不需要完整的正则表达式支持,可移植的方法是

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

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

相关内容

  • 没有找到相关文章

最新更新