这里有人能告诉我为什么 * 没有传递给 bash shell 脚本吗?
我的脚本名为 top40 是
#!/bin/bash
sudo du -shx $1 | sort -rh | head -n 40
当我尝试运行它时,top40 /var/*
* 被忽略。就像top40 /var
但我想查看目录的前 40 个大小。
当我在没有脚本的情况下执行此操作并在提示符下键入它时,它工作正常。
我实在找不到这其中的原因。谢谢你让我开眼。我使用 Ubuntu 18.04 LTS
答案1
这是基本的外壳扩张。因为调用 shell 将 识别*
为通配符,所以它实际上是为你解释一下,并将 /var/ 中所有项目的列表传递给您的脚本。
如果你逃脱通配符,或引用通配符以防止它在调用 shell 中扩展,它将按照您期望的方式传递给您的脚本。
如果我对您的意图的理解是正确的,这里有两个示例,它们可能会满足您的要求。
/path/to/script.sh '/var/run/*'
- 此示例通过将星号放在单引号字符串中来防止 shell 解释,这会绕过扩展并按原样传递给脚本。
/path/to/script.sh /var/run/\*
- 此示例只是从 shell 扩展中转义单个星号字符。
这两个示例都会导致字符串/var/run/*
按原样传递到脚本,并在其中变为$1
.