Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 带引号的Bash正则表达式_Regex_Bash - Fatal编程技术网

Regex 带引号的Bash正则表达式

Regex 带引号的Bash正则表达式,regex,bash,Regex,Bash,我正在写一个脚本,我想检查一个变量的格式。这是我使用的函数: check_non_numeric() { #re='^\".*\"$' re='\[^\]*\' if ! [[ $1 =~ $re ]] ; then echo "'$1' is not a valid format - \"[name]\" " exit 1 fi } 我希望正则表达式能够匹配一个字符串,但其内部不能有引号,其周围不能有引号(“a”或“string

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

check_non_numeric() {
    #re='^\".*\"$'
    re='\[^\]*\'
    if ! [[ $1 =~ $re ]] ; then
        echo "'$1' is not a valid format - \"[name]\" "
        exit 1
    fi
}
我希望正则表达式能够匹配一个字符串,但其内部不能有引号,其周围不能有引号(“a”或“string”或“dsfo!^$**”)。问题是我想出的这些正则表达式对我来说不起作用。我使用了一个非常类似的函数来检查一个变量是整数还是浮点,它在那里工作。你能告诉我这个正则表达式应该是什么吗


非常感谢

因为您想要匹配除带引号的字符串以外的任何内容,只需将引号作为目标:

re='["]'
if [[ ! $1 =~ $re ]] ; then
实际上你不需要正则表达式。全球化就足够了:

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

由于要将字符串以外的任何内容与引号进行匹配,只需将引号作为目标:

re='["]'
if [[ ! $1 =~ $re ]] ; then
实际上你不需要正则表达式。全球化就足够了:

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

我假设您的意思是要匹配任何不是由引号包围的字符串的内容。使用正则表达式进行匹配更容易,而bash测试“不”进行匹配——如果不清楚,请使用
。这里有几种方法

如果[[!$(expr“$string”:“\”*\”)-gt 0]];然后呼应“expr good”;fi

如果[[!“$string”=~\“*\”];然后回应“测试良好”;fi


请确保引用您正在使用expr测试的变量(该变量仅用于启发目的)。

我假设您的意思是要匹配任何不包含引号的字符串的内容。使用正则表达式进行匹配更容易,而bash测试“不”进行匹配——如果不清楚,请使用
。这里有几种方法

如果[[!$(expr“$string”:“\”*\”)-gt 0]];然后呼应“expr good”;fi

如果[[!“$string”=~\“*\”];然后回应“测试良好”;fi


请确保引用您正在使用expr测试的变量(该变量仅供参考)。

您的正则表达式非常非常遥远<代码>\[
匹配文字左方括号,
^
(字符类之外)匹配行首

类似于
“^”[^”]*”
的东西应该可以工作,如果这是您真正想要的

然而,我有点怀疑,为了用双引号传递一个值,你需要

yourprogram '"value"'


如果我是你的话,我肯定会避免这种情况。

你的正则表达式非常非常遥远。
\[
匹配一个文本左方括号,
^
(字符类之外)匹配行的开头

类似于
“^”[^”]*”
的东西应该可以工作,如果这是您真正想要的

然而,我有点怀疑,为了用双引号传递一个值,你需要

yourprogram '"value"'


如果我是你的话,我当然希望避免这种情况。

试试
re='^[^“]*$”
这可以接受你想要的一切。我不知道你想要什么。你想在字符串周围加引号,但不想在字符串内部加引号吗?还是根本不想加引号?不想编辑,但我相信你的意思是“字符串内部加引号”“Try
re=”^[^“]*$”
这可以接受一切我不知道你想要什么。你想在字符串周围加引号,但不想在字符串内部加引号吗?还是根本不想加引号?不想编辑,但我相信你的意思是“字符串内部,带引号”我可能知道为什么-我用“while getopts”获得名称循环,我像“check_non_numeric”$OPTARG一样使用它,但当我尝试在函数中回显它时,它显示没有它们-我将尝试找到如何在变量中保留它们我可能知道为什么-我用“while getopts”循环得到名称,我像“check_non_numeric”$OPTARG一样使用它,但当我尝试在函数中回显它时,它显示没有它们-我将尝试找到如何将它们保存在变量中她不需要
yourprogram的“value”
,如果他不是将字符串作为参数传递给脚本,而是将其作为文件中的一行读取-我几乎可以肯定是这样的。他不需要
yourprogram的“value”“
如果他不是将字符串作为参数传递给脚本,而是将其作为文件中的一行读取——我几乎可以肯定是这样。