В чем разница между `a[bc]d` (скобки) и `a{b,c}d` (скобки) ?

Вы были очень близки.

В объявлении переменной не должно быть пробелов вокруг = .

Do:

Var1=${myarray[0]}
28
28.04.2019, 14:21
1 ответ

Они совершенно разные.

a[bc]d— это шаблон имени файла(в оболочках, отличных отfish). Он будет расширен до двух имен файловabdи acd, если это имена существующих файлов в текущем каталоге.

  • Часть [...]представляет собой выражение в квадратных скобках, которое соответствует одному символу из перечисленных (или элементов сортировки, когда включены диапазоны ). Чтобы соответствовать шаблону a[bc]d, символ между строками aи dв имени файла должен быть либо b, либо c.

  • Если abdсуществует, а acdнет, то оно расширится только до abdи наоборот.

  • Если ни abd, ни acdне существуют, в зависимости от оболочки и параметров это вызовет ошибку (исходного Unix sh, (t)csh, zsh, fish,bash -O failglob)и, возможно, выйти из оболочки или оставить шаблон нераскрытым¹ (Bourne -как иrc-подобно оболочкам )или расширяться до нуля (bash/zsh/yash -o nullglob, некоторые старые версии fish, оригинальный Unix shи (t)csh, если в той же команде есть другие подходящие глобусы ).

a{b,c}d— это расширение скобок(в оболочках, поддерживающих эти ).Он расширится до двух строк abdи acd.

  • В этом примере часть {...}представляет собой разделенный запятыми -набор строк (; в некоторых оболочках это также может быть диапазон, такой как a..kили 20..25, или более сложные, такие как 00..20..2или 0..20..2%02d), и расширение вычисляется путем объединения каждой из этих строк с фланкирующими строками a. и d. Эти строки могут быть длиннее одного символа, а также сами могут быть расширениями фигурных скобок.

  • Расширение происходит независимо от того, соответствуют ли эти строки существующим именам файлов или нет.

Если вы создаете строки, используйте фигурные скобки. Если вы сопоставляете имена файлов, используйте шаблон имени файла.


¹ В данном конкретном случае a[bc]dможет оказаться именем существующего файла, поэтому использование таких вещей, как rm -f./*.[ch], в этих оболочках потенциально опасно, а rm -f./*.{c,h}не представляет такой проблемы.

43
20.08.2021, 11:00

Теги

Похожие вопросы