命令中使用的带引号的字符串

时间:2014-02-27 08:20:54

标签: bash cygwin

我以为我的引用是正确的,但我无法理解为什么我会得到这些不同的结果。测试目录:

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

这是引用问题还是别的什么?

1 个答案:

答案 0 :(得分:2)

Bash不会将字符串数据解释为代码,因为这非常难以预测并导致安全漏洞。

Shellcheck正确建议使用数组:

excludeParams=(-not -iwholename '*.svn*' -not -iwholename '*.bak*')
find -P . "${excludeParams[@]}" -type f -name "*.*"