Відповіді:
Повідомлення про помилку виробляється тому, що ~
цитується тильда , як описано у відповіді Занні . Якщо ви хочете скористатись ~
,, відповідною частиною сценарію має бути:
BIN_DIR=~/bin/
Якщо з будь-якої причини ви хочете цитувати рядок, ви можете використовувати змінну середовища $HOME
:
BIN_DIR="$HOME/bin/"
На мою думку, другий підхід - це краща практика.
~
в сценаріях. він працює точно так само, як і в командному рядку. Проблема полягає в тому, що цитування блоків розширення тильди, як пояснено у відповіді Занні .
$HOME
в сценаріях є хорошою ідеєю.
$HOME
ніж використовувати розширення tilde? Єдине пояснення, яке ви дали, - сказати, «це краща ідея, тому що вам слід приділяти менше уваги». Я поняття не маю, що це означає. Чи можете ви пояснити його в редагуванні? Без нього нічого не підтверджує вашу відповідь, так що, безумовно, вона належить до неї. Розширення Tilde вимагає POSIX вже досить довгий час, і лінія хешбангу сценарію є #!/bin/bash
таким чином, я вважаю, що портативність не є причиною.
Це не працює, бо ~
котирується. Подвійні котирування "
пригнічують розширення тильди . Немає каталогу з буквальною назвою ~/bin
. Як пояснено в man bash
(моє наголос):
Тильда розширення
Якщо слово починається з котируваного символу тильди (`~ '), всі символи, що передують першому косого косого косу (або всі символи, якщо немає косого косого косу), вважаються префіксом тильди. Якщо жоден із символів префікса тильди не цитується, символи в префіксі тильди після тильди трактуються як можливе ім’я для входу. Якщо це ім'я для входу є нульовим рядком, тильда заміняється значенням параметра оболонки HOME. Якщо HOME не встановлено, замість цього заміняється домашня директорія користувача, що виконує оболонку. В іншому випадку префікс тильди замінюється на домашній каталог, пов'язаний із вказаним іменем входу.
Ви можете видалити лапки , оскільки ~
це єдиний символ на шляху, ~/bin
який змусить оболонку виконати розширення, і ми хочемо розширення в цьому випадку. Оболонки не виконуватимуть якісь - які додаткові розкладання на результаті тильди, принаймні , в Bash 4 , який все поточні або віддалено останні версії Ubuntu є . Тож навіть якщо ваш домашній каталог містить незвичайні символи, такі як пробіли, це добре.
Або ви можете використовувати $HOME
замість цього ~
, оскільки розширення параметрів не придушується подвійними лапками, а лише одинарними лапками . Подвійні лапки дійсно переконайтеся , що розширене значення не саме по собі з урахуванням будь-яких подальших розширень, тому розбиття слів або розширення файлу не відбудеться. Так $HOME
працює навіть із дивно названими домашніми каталогами, якщо ви дотримуєтесь подвійних лапок.
cd '~'
є -bash: cd: ~: No such file or directory
.
~
не є частиною розширення параметрів.