![如何在 `if` 子句中检查某个文件的名称是否与某些模式匹配(例如,其中包含“SSS”)?](https://linux22.com/image/1523226/%E5%A6%82%E4%BD%95%E5%9C%A8%20%60if%60%20%E5%AD%90%E5%8F%A5%E4%B8%AD%E6%A3%80%E6%9F%A5%E6%9F%90%E4%B8%AA%E6%96%87%E4%BB%B6%E7%9A%84%E5%90%8D%E7%A7%B0%E6%98%AF%E5%90%A6%E4%B8%8E%E6%9F%90%E4%BA%9B%E6%A8%A1%E5%BC%8F%E5%8C%B9%E9%85%8D%EF%BC%88%E4%BE%8B%E5%A6%82%EF%BC%8C%E5%85%B6%E4%B8%AD%E5%8C%85%E5%90%AB%E2%80%9CSSS%E2%80%9D%EF%BC%89%EF%BC%9F.png)
如何检查某个文件的名称是否与if
子句中的某个模式匹配(例如,其中包含“SSS”)?我的变体似乎不起作用(它始终为 false)。
for f in B/* ; do
if [ $f = .*SSS.* ] ; then
# if [ -f $f ] -and -regex ".*SSS.*"; then
echo $f
fi
done
答案1
您需要双括号,并且不需要“。” (Shell 通配符不需要 sed 正则表达式)
for f in B/* ; do
if [[ $f = *SSS* ]] ; then
echo $f
fi
done
谷歌给你 https://stackoverflow.com/questions/2348379/use-regular-expression-in-if-condition-in-bash