在Bash中检查子串时出错

问题描述 投票:0回答:1

我对shell脚本很陌生,在尝试检查字符串中的子串时,遇到了一个问题.我想建立一个代码,检查你是否在运行一个基于64位的系统。我想建立一个代码来检查你是否运行的是基于64位的系统。uname -m && cat /etc/*release 命令 x86_64 在第一行。

这是我的代码。

INFO=$(uname -m && cat /etc/*release)
if [ "$INFO" == *"x86_64"* ]
then
    echo "You are running a 64bit-based system!"
else
    echo "Your system architecture is wrong!"
    exit
fi

虽然我运行的是64位系统 而且命令的输出中出现了x86_64的字样 if语句仍然返回false 所以我得到的输出是 Your system architecture is wrong!. 应该是相反的.谁能帮我找出我做错的地方?我也接受改进我的方法的一般建议,但首先,我想知道错误在哪里。

非常感谢你的帮助

linux bash shell 64-bit x86-64
1个回答
4
投票
[

命令 [ 相当于 检验 命令。test 不支持任何形式的高级匹配。test 可以用 = - 比较字符串与 ==test 是一个bash扩展。

通过这样做。

[ "$INFO" == *"x86_64"* ]

你实际上是在运行像这样的命令 [ "$INFO" == <the list of files that match"x86_64"pattern> ] - 的 *"x86_64"* 进行文件名扩展。如果你有一个名为 something_x86_64_something 它将被放置在那里,同样 cat *"x86_64"* 就可以了。

bash扩展 [[ 指挥 支持模式匹配。做。

if [[ "$INFO" == *"x86_64"* ]]

要想使用任何posix shell的可移植脚本,就使用 case:

case "$INFO" in
*x86_64*) echo yes; ;;
*) echo no; ;;
esac

1
投票

在bash版本的>=3中,你可以使用一个regex。

[[ "$INFO" =~ x86_64 ]]

1
投票

不知道为什么会这样 但你的代码在方括号加倍后就开始工作了。

INFO=$(uname -m && cat /etc/*release)
if [[ "$INFO" = *x86_64* ]]
then
    echo "You are running a 64bit-based system!"
else
    echo "Your system architecture is wrong!"
    exit
fi

也许可以在下面找到一些解释 在Bash中,双方括号[[]]比单方括号[]更好吗? 和alike.


0
投票

检查64位的方法之一是简单地grep binarch的输出。

if  /bin/arch | grep -q x86_64
then
  echo "it is 64 bit"
else
  echo "it is not"
fi
© www.soinside.com 2019 - 2024. All rights reserved.