В моей системе *
cd # move to home
mkdir tempdir
PATH="$PATH:~/tempdir" # put tempdir in path
touch tempdir/tempscript
echo -e '#!/bin/bash\necho h' > tempdir/tempscript # write script
chmod u+x tempdir/tempscript # make executable
tempscript # execute
найдет сценарий tempdir/tempscript
и печать h
.
Однако, если эхо $PATH
, мы увидим ~/tempdir
в конце, так что это было не расширен. Это то, что мы ожидаем, поскольку мы ставим двойные кавычки вокруг задания.
Невозможно найти документацию о том, почему расширение тильды происходит при оценке $PATH
. (Обратите внимание, что переменная PATH все еще имеет в ней ~
.)
Является ли это переносным поведением?
* Mac OS X ж/GNU Баш 3,2
В 'BASH' это портативное поведение. Взгляните на: [Расширение Тильды] (https://www.gnu.org/software/bash/manual/html_node/Tilde-Expansion.html) – user3439894
@ user3439894, это правда ** ЕСЛИ НЕ ЦИТАТЫ **. Quoting предотвращает расширение тильды, даже если присваивается переменной. Это явно указано в документах, которые вы указали: «Каждое присваивание переменной проверено для * неупорядоченных * тильд-префиксов» –
@Charles Duffy, ладно, я думаю, отныне я квалифицирую все, что говорю! Да, он переносится, когда это делается в рамках правил, и поэтому я включил ссылку в свой первый комментарий, так как я ожидаю, что пользователи тоже будут RT * M! – user3439894