Попробуйте добавить параметр -y к apt-get, но знаете, что он ответит на y все запросы.
Когда вы используете LANG=C gcc ..., происходит то, что оболочка устанавливает LANG только для среды gcc, а не для самой текущей среды (см. примечание). Таким образом, после окончания gcc, LANG возвращается к своему предыдущему значению (или не задан).
Кроме того, когда вы используете A=10 echo $A, это только , который заменяет $ A, а не echo, и эта подстановка (называемая «расширение») происходит до того, как оператор будет оценен (включая назначение), поэтому для работы, как ожидалось, значение A должно быть уже установлено в не [!d2 ] перед этим утверждением.
Вот почему A=10 echo $A работает не так, как ожидалось: A=10 будет установлен для эха, но echo внутренне игнорирует значение переменной среды A. И $A заменяется значением, установленным в перед (которое равно none), а затем передается как аргумент для эха.
Итак, ваше предположение верно: , тогда работает, но это актуально только в том случае, если command внутренне использует VAR. Если нет, вы можете передать value в качестве current в command, но аргументы заменяются текущей оболочкой, поэтому они должны быть установлены до использования: VAR=value; command "$VAR"
Если вы знаете, как создать исполняемый скрипт, вы можете попробовать это как тест:
#!/bin/sh
echo "1st argument is $1"
echo "A is $A"
Сохраните его как testscript и попробуйте:
$ A=5; A=10 testscript "$A"; echo "$A"
1st argument is 5
A is 10
5
И последнее, но не менее важное: стоит знать, что разница между использует и переменные среды и программу current .
Вот несколько хороших ссылок:
Как читать и устанавливать переменные среды и оболочки на Linux VPS. Понимание оболочек Unix и переменных среды. [!d31 ]
(*) Примечание: технически среда оболочки также установлена в текущей среде, и вот почему: Некоторые команды, такие как echo, read и test, являются оболочками, и поэтому они не порождают дочерний процесс. Они работают в текущей среде. Но оболочка заботится о том, чтобы назначение выполнялось только до тех пор, пока команда не будет запущена, поэтому для всех практических целей эффект будет таким же: присваивание рассматривается только одной командой.
Один из возможных способов сделать то, что вы, по-видимому, хотите, состоит в том, чтобы выдать команду:
A=10 eval 'echo $A'
, которая фактически отложит замену значения 10 на место $ A на более поздний контекст (т. е. «внутри» eval, который уже знает о назначении). Обратите внимание, что одинарные кавычки необходимы. Такая конструкция четко связывает назначение с желаемой командой (эхо в этом случае), не рискуя загрязнить текущую среду.