Когда вы используете 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, являются оболочками, и поэтому они не порождают дочерний процесс. Они работают в текущей среде. Но оболочка заботится о том, чтобы назначение выполнялось только до тех пор, пока команда не будет запущена, поэтому для всех практических целей эффект будет таким же: присваивание рассматривается только одной командой.
Если даже после всех предупреждений об использовании скрытого SSID вы все равно хотите его использовать, вы можете это сделать.
Создайте скрипт, например. ~ / bin / nm-connect-me.sh с содержимым следующего содержания:
#!/bin/sh
#
# Automatically try to connect to 'MyWiFi' when WiFi is enabled
#
# the output of nmcli should be in English
LC_ALL=C
# loop for a while until NetworkManager is accepting commands
while [ "$(nmcli -t -f WIFI,STATE nm)" = 'enabled:disconnected' ]
do
nmcli con up id MyWiFi
sleep 5
done
exit 0
Затем добавьте его в список загружаемых приложений.
Конечно, вы должны заменить MyWiFi по имени вашего SSID.
Эта информация была извлечена из: http://blog.nixpanic.net/2011/01/connect-automatically-and-immediately.html
Вы можете установить пароль хранилища ключей пустым, поэтому вам больше не будет запрашиваться пароль (я имею в виду пароль хранилища ключей, а не пароль вашей учетной записи, очевидно).