Ключевым моментом является то, что пробелы разделяют слова , если они не заключены в кавычки, а слова — это то, о чем вам нужно подумать:
Basically, the shell does the following:
- Reads its input [...]
- Breaks the input into words and operators, obeying the quoting rules described in Quoting. These tokens are separated by metacharacters. [...]
- Parses the tokens into simple and compound commands (see Shell Commands).
И:
A simple command is the kind of command encountered most often. It’s just a sequence of words separated by blanks, terminated by one of the shell’s control operators[.] - 3.2.1 Simple Commands
И:
- The words that the parser has marked as variable assignments (those preceding the command name) and redirections are saved for later processing.
- The words that are not variable assignments or redirections are expanded [...]. If any words remain after expansion, the first word is taken to be the name of the command and the remaining words are the arguments.
Обратите внимание, что здесь написано «слова, [...] помеченные как присвоения переменных». Таким образом, присваивание переменной должно состоять из одного слова, поэтому следующие просто присваивания переменной:
var=value
✓ var=" value"
✓ Но следующее не является:
var= value
✗ (два слова :назначение переменнойvar=
-назначение пустой строки -для командыvalue
)var =value
✗ (два слова :команда var
с аргументом=value
)var" =value"
✗ (одно слово :, но имена переменных нельзя заключать в кавычки, так что это команда с именемvar =value
)"var=value"
✗ (одно слово :, но имена переменных нельзя заключать в кавычки, так что это команда с именемvar=value
)Теперь для [ var = value ]
, [
есть команда (та же команда, что и test
), которая ожидает проверки и операнды для проверки как отдельные аргументы . Таким образом, вы можете делать такие вещи, как [ "$var" = "$value" ]
или test "$var" = "$value"
, где, например, var="a = b"
и value="b = c"
могут содержать вещи, которые выглядят как тесты, но таковыми не являются, потому что каждый из них является одним аргументом.
Поскольку аргументы должны быть отдельными словами, вокруг =
необходимы пробелы. И именно поэтому "$var"
и "$value"
пришлось цитировать,в противном случае оболочка разбила бы их на отдельные слова, и [
не удалось бы выполнить.
Я предполагаю, что это ошибка, потому что контейнеры, которые не запущены, не должны быть нацелены наpodman kill -a
Мне удалось избавиться от этих контейнеров, запустив
podman container rm -fa
Я смог исправить это, выполнив следующие действия: