Я хочу получить размер каталога, указанного пользователем в качестве аргумента. Пример:
read -p "Enter the directory" target
du -k $target
Если пользователь указывает путь как ~/Documents/dir
, я получаю сообщение об ошибке:du: cannot access '~/Documents/dir': No such file or directory
А если я дам команду так:
du -k ~/Documents/dir
Я получаю желаемый результат.
Почему я не могу использовать переменные вместе с командой du?
решение1
Не расширяется ~
ни после того, как он прочитан через оболочку, ни когда он помещается в du
команду. Вы можете заставить bash выполнить расширение с помощью следующего кода:
read -p "Enter the directory" target
target=${target/#\~/$HOME}
du -k "${target}"
Это ${target/#\~/$HOME}
важная часть. Она заменяет ~
содержимое HOME
переменной окружения.