Intereting Posts
Как мне скопировать папку, а не только содержимое папки? Почему не работает $ @ при передаче строк? Различные оболочки для интерактивной и неинтерактивной работы Получить свободное пространство в текущем каталоге в Bash Vim, как удалить из позиции курсора CURRENT, до конца строки и следующих N строк? ftp server log включить дополнительную информацию Почему нельзя использовать `su` для переключения на пользователей с пустым паролем? как я могу выполнять резервное копирование и восстановление разделов и логических томов? Что означает изменение файла / каталога? Как я могу настроить `anybody` для запуска X в однострочном? Где находится возможность спящего режима в Linux? Как разрешить доступ к файлам в домашней папке пользователя без загрузки? Не удалось извлечь модуль, показатель из pubkey.pem переименуйте 10 наиболее недавно измененных файлов в AIX Дополнительные дополнения для VirtualBox для Solaris

Есть ли разница между «a = b» & «a = $ b»?

Я столкнулся с двумя сценариями Unix в своем учебнике. В одном из них они реализовали a=$b (в виде max = $ a), а в другом a=b (в виде числа = num).

Вопрос

Это то же самое или есть разница?

ПРИМЕЧАНИЕ. Я новичок в сценариях Unix, поэтому, пожалуйста, со мной.

 $ a=b $ printf $a b $ b=hello $ a=$b $ printf $b hello 

В основном a=b делает переменную, называемую a значение которой является литералом b . a=$b делает переменную с именем a с тем же значением, что и уже существующая переменная b .

В случае a=$b вы присваиваете значение переменной b переменной a . В то время как в случае a=b вы назначаете значение литеральной строки « b »,

Например, b=10 , Теперь предположим, что вы хотите присвоить то же значение, что и b . Вы можете выполнить одно из следующих действий:

 a=$b 

или,

 a=10 

Вы также можете попросить bash помочь в ответе на эти вопросы, используя set -x . Этот флаг сообщает bash, чтобы отобразить команду и ее расширенные аргументы перед ее запуском:

Во-первых, некоторые настройки:

 $ a=some-value $ b=some-other-value $ set -x 

Теперь посмотрим, как интерпретатор интерпретирует эти команды:

 $ a=b + a=b 

Значение переменной a устанавливается в литеральной строке «b».

Теперь попробуем $b :

 $ a=$b + a=some-other-value 

Здесь мы скажем оболочке оценивать $b и вставляем значение b в команду.

Это показывает некоторую ценность оболочки – она ​​интерпретирует переменные и подстановочные знаки вместо того, чтобы отдельные команды выполняли работу. Например, ls не должен знать, как интерпретировать «* .txt», потому что оболочка выполняет работу до запуска ls :

 $ ls *.txt + ls a.txt b.txt c.txt a.txt b.txt c.txt