Почему префиксы Tilde расширяются до назначения, но брекеты не

Установочный образ Debian LXDE по умолчанию настраивает Openbox (поскольку это оконный менеджер LXDE по умолчанию). Он доступен по адресу http://cdimage.debian.org/debian-cd/8.2.0/amd64/iso-cd/debian-8.2.0-amd64-lxde-CD-1.iso для amd64, например; вы можете посмотреть на различные возможности, начиная с https://www.debian.org/CD/.

0
04.12.2018, 20:52
1 ответ

Ответ @StephenKitt указывает на соответствующую документацию (+1 ), указывая на ожидаемое поведение (почему префиксы тильды расширяются перед назначением, а фигурные скобки - нет? Потому что именно так они определены ).

Относительно :Возможная причина, по которой раскрытие скобок является особенным, давайте посмотрим, что не происходит при присвоении переменной:

  • распорка
  • разбиение на слова (синтаксический анализатор разбивает строку, но не разбивает результат расширения в этом слове)
  • расширение имени файла

Это именно те операции, которые могут изменить количество слов расширения:

Расширение корпуса:

Only brace expansion, word splitting, and filename expansion can change the number of words of the expansion

В примерах переменная представляет собой строку, а не массив, и должна содержать только одно слово.

Раскрытие скобок происходит при присвоении массива, как в brace=({a..c}). Чтобы использовать более сложный пример:

internal_tilde=({~,~+}/new_dir)
echo "${internal_tilde[@]}"
# /Users/DeNovo/new_dir /Your/Working/Directory/new_dir

Итак, я бы предположил, что эта конструкция имеет смысл (, а не является исторической причудой ). Расширение тильды не меняет количество слов. Расширение скобок делает. Если вы хотите, чтобы ваша переменная содержала более одного слова, используйте структуру данных, предназначенную для этого.

0
28.01.2020, 02:18

Теги

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