作为训练和提高我的bash技能的一部分,我试图设置below基本bash脚本来测试用grep从stdin读取的值/变量。
#!/bin/bash
declare -A COMPLIANCE=( [special_characters]="[^a-zA-Z0-9_]|[[:blank:]]" )
read -sp "Enter Password: " password
echo
for rule in "${!COMPLIANCE[@]}"; do
grep -E "\"${COMPLIANCE[${rule}]}\"" <<< "\"${password}\""; exit="${?}"
if [[ "${exit}" -gt 0 ]]; then echo "status ${exit}: ${rule} not compliant"; fi;
done
当我使用包含特殊字符的普通文本值直接从终端运行grep命令时,它可以正常工作
grep -E "[^a-zA-Z0-9_]|[[:blank:]]" <<< "abc@"
结果:abc@
但是当包含在脚本中时,相同的命令不起作用。
我也很好奇,当提供一个特殊字符(如“@”)时,脚本是否可以工作。所以我在正则表达式中添加了“+”量词,但仍然没有成功
我认为regex有一些问题,可能是:blank:,如这里所解释的https://www.regular-expressions.info/posixbrackets.html。但我的问题又没有得到调查结果。
我用的是centos stream 9盒子。
谢谢
1条答案
按热度按时间llycmphe1#
正如@GordonDavisson指出的那样,我删除了额外的双引号,它可以工作。但我做了一个直接的声明。我还在读cmd行中添加了IFS=以保留前导和/或结尾空格,并添加了-r选项以保留最终的反斜杠。