使用引号Bash正则表达式

时间:2016-05-08 20:21:47

标签: regex bash

我正在写一个脚本,我想检查变量的格式。这是我使用的功能:

check_non_numeric() {
    #re='^\".*\"$'
    re='\[^\]*\'
    if ! [[ $1 =~ $re ]] ; then
        echo "'$1' is not a valid format - \"[name]\" "
        exit 1
    fi
}

我希望正则表达式匹配一个字符串,除了引号内部和引号外的所有内容(" a"或"字符串"或" dsfo!^ $ **#&#34)。问题是我提出的这些正则表达式对我不起作用。我使用了一个非常相似的函数来检查变量是一个整数还是浮点数并且它在那里工作。你能告诉我正则表达式应该是什么吗?

非常感谢

3 个答案:

答案 0 :(得分:1)

如果您想匹配带引号的字符串以外的任何内容,您只需定位引号:

re='["]'
if [[ ! $1 =~ $re ]] ; then

实际上你并不需要正则表达式。 Globbing就足够了:

if [[ ! $1 = *\"* ]]; then
...
fi

答案 1 :(得分:1)

我假设你想要匹配任何不是由引号括起来的字符串。匹配使用你的正则表达式匹配更容易,而bash-test与“not”匹配更容易匹配 - 如果不清楚,请使用!。这有几种方法可以做到。

if [[ ! $(expr "$string" : '\".*\"') -gt 0 ]]; then echo "expr good"; fi

if [[ ! "$string" =~ \".*\" ]]; then echo "test good"; fi

请确保引用您正在使用expr进行测试的变量(仅用于修改目的)。

答案 2 :(得分:0)

你的正则表达非常非常遥远。 \[与文字左方括号相匹配,^(字符类外)与行首相匹配。

'^"[^"]*"'这样的东西应该有效,如果那真的是你想要的。

然而,我有点怀疑。为了传递文字双引号中的值,您需要类似

的内容
yourprogram '"value"'

yourprogram "\"value\""

如果我是你,我当然希望避免。