bash - "=~"运算符在 shell 脚本中有什么作用?

标签 bash shell

它似乎是一种比较运算符,但它究竟做了什么,例如以下代码(取自 https://github.com/lvv/git-prompt/blob/master/git-prompt.sh#L154 )?

    if [[ $LC_CTYPE =~ "UTF" && $TERM != "linux" ]];  then
            elipses_marker="…"
    else
            elipses_marker="..."
    fi

我目前正在尝试让 git-prompt 在 MinGW 下工作,而 MinGW 提供的 shell 似乎不支持这个运算符:

conditional binary operator expected
syntax error near `=~'
`        if [[ $LC_CTYPE =~ "UTF" && $TERM != "linux" ]];  then'

在这种特定情况下,我可以用 elipses_marker="…" 替换整个 block (因为我知道我的终端支持 unicode),但是这个 =~ 到底是什么是吗?

最佳答案

它是对内置 [[ 命令的一个仅限 bash 的补充,执行正则表达式匹配。由于它不必与完整字符串完全匹配,因此符号会被波浪形表示“不精确”匹配。

在这种情况下,如果 $LC_CTYPE CONTAINS 字符串“UTF”。

更便携的版本:

if test `echo $LC_CTYPE | grep -c UTF` -ne 0 -a "$TERM" != "linux"
then
  ...
else
  ...
fi

关于bash - "=~"运算符在 shell 脚本中有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11206233/

相关文章:

shell - KornShell 错误 0403-004 使用此命令指定参数

linux - 在solaris中获取昨天的日期

c - bc (standard_in) 1 : syntax error

C - 从字符串中获取 CLEAN 数字变量

linux - 这个 bash while 循环的 bool 表达式中的 -lt 是什么意思?

Linux 脚本变量无法正确识别

bash - 使用带有 yt-download 和 ffmpeg 的 bash 脚本来提取或隐藏,具体取决于格式

bash - 如何在 ssh session 中执行 scp 命令?

git - 寻找一种使用 git flow 自动化 "bump version"的方法

linux - sshpass:找不到命令错误