[ $i = "*f*" ] divide o nome do arquivo armazenado na variável i em palavras separadas em espaços, interpreta cada palavra como um padrão curinga e a expande se corresponder e, em seguida, analisa a lista de palavras resultante como uma condição para% código%. Para evitar essa ladainha e, em vez disso, usar o nome do arquivo, colocam aspas duplas em torno da expansão da variável .
[ … ] testa se o nome do arquivo na variável [ "$i" = "*f*" ] é o nome de três caracteres i . Se você não tiver um arquivo com esse nome, todos os arquivos dispararão o ramo else, então *f* é impresso.
Em ksh, bash ou zsh, você pode testar se uma string corresponde a um padrão curinga usando a construção de colchete duplo. Deixe os curingas no padrão sem aspas.
if [[ "$i" = *f* ]]; then …
Em sh simples, não há sintaxe de colchetes duplos. Para testar se uma string corresponde a um padrão, você pode usar uma construção yes .
case "$i" in
*f*) echo "no";;
*) echo "yes";;
esac