Linux 如何检查bash脚本中$1是否包含特殊字符?

Linux 如何检查bash脚本中$1是否包含特殊字符?,linux,bash,scripting,Linux,Bash,Scripting,我想检查$1是否具有以下任何特殊字符@$%&*-=+ 用户将按如下方式运行脚本: testserver@matrix:~> scriptname somer@nd$m 脚本应检测是否somer@nd$m有任何特殊字符! 如果您正在寻找可以使用的特殊字符的存在,请感谢 if egrep -q "[@#$%&*-=+]" <<< "$1" then echo "Special Characters" fi if egrep-q“[@#$%&*-=+]”如果

我想检查
$1
是否具有以下任何特殊字符
@$%&*-=+

用户将按如下方式运行脚本:

testserver@matrix:~> scriptname somer@nd$m
脚本应检测是否
somer@nd$m
有任何特殊字符!
如果您正在寻找可以使用的特殊字符的存在,请感谢

if egrep -q "[@#$%&*-=+]" <<< "$1"
then
    echo "Special Characters"
fi

if egrep-q“[@#$%&*-=+]”如果您只是在寻找可以使用的特殊字符的存在

if egrep -q "[@#$%&*-=+]" <<< "$1"
then
    echo "Special Characters"
fi

如果egrep-q“[@#$%&*-=+]”通常,要确定变量是否包含字符集的成员,可以使用bash手册中描述的字符集

[[ $var = *[set]* ]]
在你的例子中,集合合成是很棘手的。它包含“&”和“-”,具有特殊含义。破折号在前面,或者shell将角色集视为一个范围。只需要逃出符号就行了。所以你必须这么做

[[ $var = *[-@#$%'&'*=+]* ]]

通常,要确定变量是否包含字符集的成员,可以使用bash手册中描述的字符集

[[ $var = *[set]* ]]
在你的例子中,集合合成是很棘手的。它包含“&”和“-”,具有特殊含义。破折号在前面,或者shell将角色集视为一个范围。只需要逃出符号就行了。所以你必须这么做

[[ $var = *[-@#$%'&'*=+]* ]]

你有试过什么吗?为什么要检查?“你在担心什么?”EtanReisner闻到一个X-Y问题。我也是。我做这篇文章是为了大学作业,介绍bash脚本。整个作业都完成了,但我被特殊角色困住了。你试过什么吗?你为什么要检查?“你在担心什么?”EtanReisner闻到一个X-Y问题。我也是。我做这篇文章是为了大学作业,介绍bash脚本。整个作业都完成了,但我被特殊字符卡住了。谢谢你的回答,但我试过这个方法,但它不起作用。即使周围有单引号。我还尝试在正则表达式中去掉grep,并将其与$1参数进行比较,但这也不起作用!感谢由于破折号,表达式被解释为字符集范围。感谢您的回答,但我尝试过这种方法,但它不起作用。即使周围有单引号。我还尝试在正则表达式中去掉grep,并将其与$1参数进行比较,但这也不起作用!感谢由于破折号,表达式被解释为字符集范围。