我想获取用户作为参数提供的目录的大小。示例:
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
在 shell 中读入后不会展开~
,放入命令中也不会展开du
。您可以使用以下代码强制 bash 进行展开:
read -p "Enter the directory" target
target=${target/#\~/$HOME}
du -k "${target}"
这${target/#\~/$HOME}
是重点部分。它替换~
为环境变量的内容HOME
。