~
— это ярлык для вашего домашнего каталога, но только когда он появляется в начале строки вне кавычек . Начало правой -части оператора присваивания является началом строки, поэтому env1=~/Dropbox/.env
будет работать как (или env1=~"/Dropbox/.env"
или любое количество вариантов ). Он устанавливает env1
в /home/roach/Dropbox/.env
. Но env1="~/Dropbox/.env"
устанавливает env1
в точную строку ~/Dropbox/.env
, которая в качестве имени файла выглядит внутри каталога с одним -символьным именем ~
в текущем каталоге.
Тильда — это аббревиатура, а не подстановочный знак. $env1
вне кавычек расширяет подстановочные знаки в значении env1
, но не расширяет тильду, потому что тильда не является подстановочным знаком.
Вы также можете использовать env1="$HOME/Dropbox/.env"
. Это эквивалентно env1=~/Dropbox/.env
. Символ$
(доллар )имеет особое значение внутри двойных кавычек (это то же значение, что и вне кавычек ):он начинает подстановку переменной (или команду или арифметическую подстановку ). С другой стороны, символ~
(тильда )является обычным символом, если он заключен в кавычки, даже в двойные кавычки.
Что касается псевдонима, причина, по которой он не работает в сценарии bash, заключается в том, что bash по умолчанию не расширяет псевдонимы в сценариях.Он не будет работать ни в одном сценарии, если вы не включите или не получите определение псевдонима в этом сценарии, поскольку псевдонимы являются свойством каждого экземпляра оболочки. Они не являются частью среды процесса.
Причина, по которой псевдоним вообще работает во втором скрипте, заключается в том, что dotdrop сама расширяет тильду, когда читает значение конфигурации.