В моей системе*
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 bash 3.2
BASH
это переносимое поведение. Взгляните на: Расширение Тильды - person user3439894   schedule 06.02.2015xargs
или аналогичный инструмент будет иметь такой эффект. - person Charles Duffy   schedule 06.02.2015