Нет такого файла или каталога (ls) в сочетании с расширением тильды

Я пишу простой сценарий bash и хотел отобразить все элементы в определенном каталоге. Я пытался сделать следующее:

desktop="~/Desktop/testr/"
echo $desktop
echo `ls $desktop`

Однако я продолжаю получать вывод:

~/Desktop/testr/
ls: ~/Desktop/testr/: No such file or directory

Но когда я запускаю ls из терминала, я вижу элементы. Я подозреваю, что проблема в том, что ~ не расширяется, но я думал, что двойные кавычки позаботятся об этом.

Спасибо за вашу помощь!

1 ответ

Решение

Это связано с тем, что внутри строк в кавычках нет расширения тильды, а расширение тильды предшествует замене параметра в строке эха.

Последовательность расширений:

  1. Расширение тильды
  2. расширение параметра
  3. подстановка команд
  4. арифметическое расширение
  5. Расщепление поля
  6. Расширение пути
  7. Удаление цитаты

Посмотрите Спецификацию Оболочки POSIX на Расширения Word для подробностей.

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