我想在图片文件夹中找到某些文件类型,并且在/home/user/pictures
文件夹中创建了以下bash脚本:
for i in *.pdf *.sh *.txt;
do
echo 'all file types with extension' $i;
find /home/user/pictures -type f -iname $i;
done
但是当我执行bash脚本时,它对于<> /home/user/pictures
上的文件无法正常工作。该命令不是回显“带有扩展名* .sh的所有文件类型”,而是解释基本目录的变量:all file types with extension file1.sh
/home/user/pictures/file1.sh
all file types with extension file2.sh
/home/user/pictures/file2.sh
all file types with extension file3.sh
/home/user/pictures/file3.sh
我想知道为什么echo-命令不会打印“扩展名为* .sh的所有文件类型”。
我想在Pictures文件夹中找到一些文件类型,并且我在/ home / user / pictures文件夹中创建了以下bash脚本:对于* .pdf * .sh * .txt中的i;用...
*
的字符串或扩展为这样的字符串的变量可以扩展为glob模式,除非通过将其放在引号内来保护该字符串不受glob扩展的影响(尽管如果glob模式没有匹配任何文件,则尝试扩展后将保留原始的glob模式)。在这种情况下,不希望发生全局扩展-包含*
的字符串需要作为文字传递给echo
和find
命令中的每一个。因此,$i
应该用双引号引起来-这些将允许从$i
进行变量扩展,但随后的通配符扩展将不会发生。 (如果改为使用单引号,即'$i'
,则将文字$i
传递给echo
和find
,这也是不希望的。)除此之外,如果在当前目录中存在任何与任何glob模式匹配的文件,则起始
for
行需要使用引号来防止通配符扩展。在这种情况下,使用单引号还是双引号都没关系。另外,这里的修订代码也删除了一些不必要的分号。