【问题标题】:How does this bash script know the files in my current directory?这个 bash 脚本如何知道我当前目录中的文件?
【发布时间】:2021-04-26 22:06:15
【问题描述】:

在阅读Bash Reference Manual 时,我遇到了以下示例:

select fname in *;
do
    echo you picked $fname \($REPLY\)
    break;
done

脚本的输出如下:

1) case1.sh
2) loop1.sh
3) loop2.sh
4) select1.sh
#? 3
you picked loop2.sh (3)

所有给出的选项都是我运行脚本的目录的文件 (select1.sh)。 我的问题是脚本如何知道我当前工作目录的内容?

我的猜测是 * 令牌对此负责。

【问题讨论】:

  • 你的猜测是正确的。 shell 会自动扩展通配符。
  • 试试echo *,你会看到的。
  • 在所有情况下都是相似的。
  • ls *, cat *, echo * 在所有这些中,* 扩展为所有文件名(默认情况下点文件除外)。
  • 参见手册中的filename expansion

标签: bash glob


【解决方案1】:

* 是一个glob(通配符模式),它扩展为当前工作目录中所有文件的名称(不包括隐藏文件by default)。您可以通过运行 echo * 轻松演示这一点,它应该会产生以下输出:

case1.sh loop1.sh loop2.sh select1.sh

这在Filename Expansion 下的 Bash 手册中有记录。

【讨论】:

    猜你喜欢
    • 2018-01-25
    • 2010-09-16
    • 2020-05-13
    • 2012-05-19
    • 2014-03-25
    • 1970-01-01
    • 2011-03-21
    相关资源
    最近更新 更多