如何将参数(= 带 * 的路径)传递给 bash 脚本

如何将参数(= 带 * 的路径)传递给 bash 脚本

这里有人能告诉我为什么 * 没有传递给 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.

相关内容