ユーザーが引数として指定したディレクトリのサイズを取得したい。例:
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
。