Проблема с загрузкой PPA. Подпись GPG: подтверждение не выполнено 3 раза.

Чтобы ответить на ваш основной вопрос, ${foo} называется «расширение параметра». Чтобы быть точным, сам $ начинает расширение параметра, { } на самом деле необязательны в соответствии с спецификацией POSIX, но могут быть полезны для указания конца имени переменной:

$ foo="bar"
$ echo $fooBaz   ## fails, no variable named $fooBaz exists

$ echo ${foo}Baz ## works, $foo is expanded and the string Baz is appended
barBaz

В принципе , $foo и ${foo} идентичны. Помимо случаев, подобных приведенному выше или когда вы выполняете «расширение параметра» , они полностью эквивалентны.

Однако вы не должны использовать ни один из них. Эмпирическое правило состоит в том, что, за очень небольшим исключением, вы всегда должны использовать "$foo" или "${foo}" и никогда $foo или ${foo}. Вы всегда должны указывать свои переменные, чтобы избежать вызова оператора split + glob (подробнее об этом позже). Вы, конечно, не хотите $foo$. Окончательный $ не имеет значения:

$ foo="bar"
$ echo "$foo$"
bar$

Итак, хотя некорректные переменные иногда выглядят нормально:

$ echo $foo
bar

Их обычно нет и их следует избегать: [!d8 ]

$ if [ -n $foo ]; then echo empty; else echo "not empty"; fi ## fails
empty

$ if [ -n "$foo" ]; then echo empty; else echo "not empty"; fi ## works
not empty

Обратите внимание, что скобки здесь не помогают:

$ if [ -n ${foo} ]; then echo empty; else echo "not empty"; fi  ## fails
empty

$ if [ -n "${foo}" ]; then echo empty; else echo "not empty"; fi ## works
not empty

Когда вы используете $foo или ${foo}, оболочка будет разделять значение, сохраненное в переменной в пробеле (это можно изменить, установив переменную IFS в нечто другое) в список, а затем каждый элемент списка рассматривается как шаблон glob и расширяется в любые соответствующие файлы или каталоги. Это называется оператором всегда . Чтобы проиллюстрировать, рассмотрите каталог с двумя файлами:

$ ls -l
-rw-r--r-- 1 terdon terdon 0 Oct  9 18:16 file1
-rw-r--r-- 1 terdon terdon 0 Oct  9 18:16 file2

Теперь давайте установим переменную в foo *:

$ foo="foo *"

Что произойдет, если мы попытаемся проверить, файл с этим именем существует?

$ if [ -e $foo ]; then echo "file exists"; else echo "no such file"; fi
file exists

Переменная была разделена на foo и *, а поскольку * является подстановочным знаком, который соответствует любой строке, оболочка сообщает вам, что файл, foo * экксисты. Однако, если мы приводим его правильно, это не происходит:

$ if [ -e "$foo" ]; then echo "file exists"; else echo "no such file"; fi
no such file

Это был тривиальный пример, иллюстрирующий эту точку. Представьте, если бы я использовал rm вместо echo.

Итак, первое правило: split Вы можете использовать либо "$foo", либо "${foo}", но процитировать его в любом случае. Более подробно об использовании переменных безопасно, посмотрите на эти сообщения:

$ VAR vs $ {VAR} и процитировать или не указывать Расширение переменной оболочки и эффект glob и разделение на нее Безопасность последствия забывания процитировать переменную в оболочках bash / POSIX. Почему мне нужно указывать переменную для if, но не для эха?

1
задан 7 June 2011 в 20:34

8 ответов

Проблема решена. После добавления OpenPGP все в порядке.

Подробнее о обсуждении https://answers.launchpad.net/launchpad/+question/156588

1
ответ дан 25 July 2018 в 21:59

решена проблема. После добавления моих ключей все ок.

более подробную информацию о дискуссии https://answers.launchpad.net/launchpad/+вопрос/156588

1
ответ дан 26 July 2018 в 18:11

Проблема решена. После добавления OpenPGP все в порядке.

Подробнее о обсуждении https://answers.launchpad.net/launchpad/+question/156588

1
ответ дан 2 August 2018 в 03:32

решена проблема. После добавления моих ключей все ок.

более подробную информацию о дискуссии https://answers.launchpad.net/launchpad/+вопрос/156588

1
ответ дан 4 August 2018 в 19:31

Проблема решена. После добавления OpenPGP все в порядке.

Подробнее о обсуждении https://answers.launchpad.net/launchpad/+question/156588

1
ответ дан 6 August 2018 в 03:40

Проблема решена. После добавления моего OpenPGP все в порядке.

Подробнее о обсуждении https://answers.launchpad.net/launchpad/+question/156588

1
ответ дан 7 August 2018 в 21:31

Проблема решена. После добавления моего OpenPGP все в порядке.

Подробнее о обсуждении https://answers.launchpad.net/launchpad/+question/156588

1
ответ дан 10 August 2018 в 09:48

Проблема решена. После добавления моего OpenPGP все в порядке.

Подробнее о обсуждении https://answers.launchpad.net/launchpad/+question/156588

1
ответ дан 12 August 2018 в 19:01

Другие вопросы по тегам:

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