Тильда не раскрывается при цитировании справа от присваивания переменной Bash

Я сделал каталог ~/test_myDir

Затем я запускаю следующий скрипт bash:

x="myDir"

dirName="~/test_$x"

cd $dirName
echo "hey" > test.txt

Я получаю следующую ошибку:

test.sh: line 5: cd: ~/test_myDir: No such file or directory

Затем я удаляю цитаты из второго назначения:

x="myDir"

dirName=~/test_$x

cd $dirName
echo "hey" > test.txt

Скрипт работает без ошибок.

Что здесь происходит? Я столкнулся с этой проблемой в более крупном и сложном сценарии и сузил его до использования кавычек в присваивании переменной, содержащей другую переменную.

Тем не менее, из сообщения об ошибке похоже, что полный путь корректно раскрывается в вызове "cd".

1 ответ

Решение

Кавычки препятствуют расширению ~, замещать ~ с $HOME или использовать dirName=~/"test_$x",

Из объяснения руководства по расширению тильды:

Каждое присвоение переменной проверяется на наличие префиксов тильды без кавычек, следующих сразу за: или первым =. В этих случаях также выполняется расширение тильды.

Другие вопросы по тегам