Итак, в настоящее время я склоняюсь к написанию сценариев Bash, и я немного запутался в разнице между сопоставлением с образцом и расширением имени файла.
справочное руководство по Bash гласит:
После разделения слов, если только
-f' option has been set (see section 4.3.1 The Set Builtin), Bash scans each word for the characters
*',?', and
['. Если появляется один из этих символов, слово рассматривается как шаблон и заменяется отсортированным по алфавиту списком имен файлов, соответствующих шаблону.
Это мне говорит о том, что следующее, вероятно, не должно делать то, что мы хотим:
if [[ $a == [cb]at* ]] ; then ...
В этом случае [cb]at*
не расширяется до списка файлов, начинающихся с cat или bat, как следует из приведенной выше цитаты, а действует скорее как очень ограниченное регулярное выражение. Почему? Когда символы *?[ действуют как регулярное выражение, а не расширяются до соответствующих файлов в текущем каталоге?