Поскольку !
используется в сравнениях и означает НЕ .
Например:
a=3
b=2
[ $a -eq $b ] && echo "Equal"
[ ! $a -eq $b ] && echo "Not equal"
# of cause last comparison is possible to write as:
[ $a -eq $b ] || echo "Not equal"
[ $a -eq $b ]
echo $?
1
[ ! $a -eq $b ]
echo $?
0
Правильным решением является использование квадратных скобок [ ]
. Конечно, я решил это через 5 минут после публикации. Я надеюсь, что это поможет кому-то в будущем.
$ find./ -type f \( -iname "*[\*]*" \)
Будьте осторожны. Находка (1 )жалуется на нечто совсем другое. Скажем, в текущем каталоге у вас есть файлы a
, b
, c
. Если вы позвоните, например.:
find./ -type f \( -iname * \)
то, что find
получает, это./ -type f ( -iname a b c )
(оболочка расширяет ' *' перед тем, как передать ей результирующую командную строку, круглые скобки заключаются в кавычки; точно такой же результат для***
). Если вы напишете:
find./ -type f \( -iname \* \)
получается ./ -type f ( -iname * )
,