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