Shr*_*ram 4 linux shell centos centos6
我在两台机器上使用CentOS 6.4 final.我正在执行一个脚本.该脚本包含该find命令
path=$1
searchstring=$2
echo `find $path -name $searchString`
for filename in `find $path -name $searchString`
do
echo "$filename"
echo
done
./findfiles.sh /var/log/ *.txt
Run Code Online (Sandbox Code Playgroud)
上面的脚本执行正常并打印文件.但在我得到的第二台机器上usage error: find: paths must precede expression
后面的原因是*.txt在find命令中被扩展.更改文件名后,find $path -name "$searchString"
它正在执行正常.
为什么在第一台CentOS机器上没有发生语法错误?
您需要使用正确的引用,否则shell会*.txt 在 find看到它之前尝试扩展.
因此,如果当前文件夹中a.txt和b.txt,然后find /var/log -name a.txt b.txt将被执行- > find会混淆你想要做什么b.txt
这就是使用正确引用如此重要的原因.你的脚本应该是:
path="$1"
searchstring="$2"
echo $(find "$path" -name "$searchString")
for filename in $(find "$path" -name "$searchString")
do
echo "$filename"
echo
done
Run Code Online (Sandbox Code Playgroud)
请注意,我引用了变量赋值(否则,在定义时会发生glob扩展searchstring.使用变量时相同.
没有报价$()!如果你在那里添加引号,那么find会返回一个单词"word"作为结果.
也总是喜欢$()旧的内联eval和后退.它更可靠,不易出现细微错误,更具可读性.