2013-09-16 2 views
1

я наткнулся на эту аккуратную команду, чтобы проверить время любого часового пояса в Баш

TZ=US/Hawaii date 

, который делает то же самое, как

export TZ=US/Hawaii 
date 

Каким первой команды работают, в то время как следующая команда не работает ?

test=6 echo $test 

ответ

5

Переменные расширили перед тем выполнения команд в строке. Таким образом, в последнем примере $test разворачивается до выполнения задания.

Вы можете получить эффект, который вы хотите с:

test=6 bash -c 'echo $test' 

Это запускает новый процесс оболочки. Поскольку аргумент цитируется, переменные не расширяются исходной оболочкой, подоболочка расширяет ее в среде, где установлен $test.

4

В первом случае звонок date использует значение TZ, которое помещается в его среду. Во втором случае расширение $test выполняется оболочкой до того, какecho фактически запущен. Значение test в среде echo не имеет значения. Почти эквивалент, который будет работать, будет

(test=6; echo $test) 
Смежные вопросы