我认为我引用正确,但我无法弄清楚为什么我会得到这些不同的结果。测试目录:
ls /d/Temp/test
显示:
textFile.txt textFile.txt.bak
我的测试脚本是:
cd /d/Temp/test
excludeString="-not -iwholename '*.svn*' -not -iwholename '*.bak*'"
find -P . $excludeString -type f -name "*.*"
echo =======================
find -P . -not -iwholename '*.svn*' -not -iwholename '*.bak*' -type f -name "*.*"
结果如下:
./textFile.txt
./textFile.txt.bak
=======================
./textFile.txt
这是引用问题还是其他问题?
Bash 不会将字符串数据解释为代码,因为这非常不可预测并导致安全漏洞。
Shellcheck 正确地建议改用数组:
excludeParams=(-not -iwholename '*.svn*' -not -iwholename '*.bak*')
find -P . "${excludeParams[@]}" -type f -name "*.*"