gpt4 book ai didi

regex - 在 bash 中使用 rexep 的条件语句

转载 作者:行者123 更新时间:2023-11-29 09:13:27 24 4
gpt4 key购买 nike

我想使用 bash 的“条件正则表达式”结构,自 bash 第三版(大约 2004 年)以来就存在。它应该是这样的:

if [[ $string =~ $regexp ]]; then
#do smthg
else
#do somthg else
fi

这是我的代码,遵循这个结构,它的作用是检查 SSID 中包含的名称是否出现在 iw dev wlan0 link 的输出中:

if [[ $(iw dev wlan0 link) =~ $SSID+ ]]; then 
#do sthming
else
echo "wrong network"

fi

出于某种我无法破译的原因,如果我将它直接运行到 bash shell 中,这个语句会工作得很好,比如

if [[ $(iw dev wlan0 link) =~ $SSID+ ]]; then echo found; else echo not found; fi

但是如果我在包含的脚本中运行它,它会吐出:

scripts/ssidchecker.sh: 22: [[: not found

22 是“fi”关键字所在的行。 最奇怪的是它会一直执行“else”语句中包含的代码

“未找到”是否意味着正则表达式在该字符串中找不到任何内容?这是一个真正的错误信息吗?

最佳答案

开始注意:答案是根据相关评论的输入创建的,尤其是对最后一条评论的回应。

首先,什么是[[?它是一个 shell 关键字。

samveen@maverick:~$ type [[
[[ is a shell keyword

这意味着 [[ 是 bash 的内部关键字,而不是命令,因此不能与其他 shell 一起使用。因此,您的错误输出

scripts/ssidchecker.sh: 22: [[: not found

表示您正在使用的外壳可能是

  • 不是 bash
  • 早于 2.02 的 bash 版本([[ 在 Bash-2.02 中引入)

鉴于 2.02 是一个非常非常旧的版本(Y2K 之前),所有这些都表明您用来运行脚本的 shell 可能不是 /bin/bash,而可能是 /bin/sh,这是 Bourne shell 脚本 shebang(#!)行最常用的路径。

请将其更改为 /bin/bash 或显式运行 bash scripts/ssidchecker.sh 就可以了。

至于为什么一直执行else段,[[ command not being found 等同于失败(非零返回值),从if 的观点。因此 else 部分被执行。

samveen@maverick:~$ /bin/whosyourdaddy
-bash: /bin/whosyourdaddy: No such file or directory
samveen@maverick:~$ echo $?
127

作为可移植性的旁注,bash 黑客 wiki 还对 [[ 关键字进行了说明:

Amongst the major "POSIX-shell superset languages" (for lack of a better term) which do have [[, the test expression compound command is one of the very most portable non-POSIX features. Aside from the =~ operator, almost every major feature is consistent between Ksh88, Ksh93, mksh, Zsh, and Bash. Ksh93 also adds a large number of unique pattern matching features not supported by other shells including support for several different regex dialects, which are invoked using a different syntax from Bash's =~, though =~ is still supported by ksh and defaults to ERE.

因此即使 shell 支持 [[,你的脚本也可能在 =~ 上失败,以防 shell 不是 bash但支持 [[.

关于regex - 在 bash 中使用 rexep 的条件语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10110365/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com