加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Bash – 在正则表达式中逃避美元的正确方法

发布时间:2020-12-15 21:06:02 所属栏目:安全 来源:网络整理
导读:在bash正则表达式中逃避美元符号的正确方法是什么?我试图测试字符串是否以美元符号开头.这是我的代码,我在双引号表达式中双重逃避美元: echo -e "AB1nAB2n$EXTERNAL_REFnAB3" | while read value;do if [[ ! $value =~ "^$" ]]; then echo $value el
在bash正则表达式中逃避美元符号的正确方法是什么?我试图测试字符串是否以美元符号开头.这是我的代码,我在双引号表达式中双重逃避美元:

echo -e "AB1nAB2n$EXTERNAL_REFnAB3" | while read value;
do
    if [[ ! $value =~ "^$" ]];
    then
            echo $value
    else
            echo "Variable found: $value"
    fi
done

这就是我想要的一个盒子,它有:

GNU bash,version 3.2.25(1)-release (x86_64-redhat-linux-gnu)

并且详细的输出显示

+ [[ ! $EXTERNAL_REF =~ ^$]]
+ echo 'Variable found: $EXTERNAL_REF'

但是,在另一个使用的盒子上

GNU bash,version 4.1.2(1)-release (x86_64-redhat-linux-gnu)

比较扩展如下

+ [[ ! $EXTERNAL_REF =~ ^$]]
+ echo '$EXTERNAL_REF'

是否有一种标准/更好的方法可以在所有实现中使用?

非常感谢

解决方法

为什么在这里使用正则表达式?一个glob足够了:

#!/bin/bash

while read value; do
   if [[ "$value" != $* ]]; then
       echo "$value"
   else
       echo "Variable found: $value"
   fi
done < <(printf "%sn" "AB1" "AB2" '$EXTERNAL_REF' "AB3")

与shopt -s compat32一起使用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读