如何使用Bash select命令显示不同的目录内容?

如何使用Bash select命令显示不同的目录内容?

到目前为止我已经找到了一些 Bash 的例子选择函数用法与逻辑构造选项或者星号一(IE select s in *)。最后一项列出了所有实际目录内容。

所以我想了解以下内容:

  1. 这是什么*意思?

  2. 如何显示另一个目录内容?
    (我尝试了 和opt=$( ls path )select s in "$opt[@]"但失败了)

欢迎任何相关链接或示例。

答案1

*就是所谓的“全局” 并且将被 bash 扩展为“当前目录中的所有文件”,因此它基本上会扩展为当前目录中所有文件的空格分隔列表(这是许多 bash 内置流控制通常期望的格式结构体)。

Glob 不仅可以独立使用,还可以作为表达式的一部分使用,因此假设您有一个存储在 bash 变量中的目录$searchdir(命名 bash 变量时要小心,以免意外覆盖重要的环境变量,例如$PATH

select s in "$searchdir"/*

将扩展为“中的所有文件$searchdir”。

笔记但是,如果目录恰好为空,则表达式将等于字面意思 *(或字面意思/the/actual/value/pointed/to/by/searchdir/*)除非您设置了nullglob选项通过

shopt -s nullglob

然后,如果目录为空,则 glob 构造将扩展为一个空列表,这通常是您想要的。

相关内容