Тильда не раскрывается при цитировании справа от присваивания переменной 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"
,
Из объяснения руководства по расширению тильды:
Каждое присвоение переменной проверяется на наличие префиксов тильды без кавычек, следующих сразу за: или первым =. В этих случаях также выполняется расширение тильды.