Bash

如何使用 Bash select 命令顯示不同的目錄內容?

  • November 21, 2019

到目前為止,我已經找到了一些使用邏輯構造選項Asterisk one(即)的 Bash選擇函式用法範例。最後一個列出了所有實際的目錄內容。select s in *

所以我想了解以下內容:

  1. 是什麼*意思?
  2. 如何顯示另一個目錄內容?

(我嘗試了一些東西opt=$( ls path )select s in "$opt[@]"但它失敗了)

歡迎任何相關連結或範例。

*就是所謂的“ glob ,會被bash擴展為“目前目錄下的所有文件”,所以基本上會擴展為目前目錄下所有文件的空格分隔列表(這是常用的格式許多 bash 內置流控制結構所期望的)。

Glob 不僅可以單獨使用,還可以作為表達式的一部分使用,因此假設您有一個儲存在 bash 變數中的目錄$searchdir(在命名 bash 變數時要小心,以免意外覆蓋基本$PATH的環境變數,例如)構造

select s in "$searchdir"/*

將擴展為“所有文件$searchdir”。

但是請注意,如果目錄碰巧為空,則表達式將相當於文字 *(或字面意思/the/actual/value/pointed/to/by/searchdir/*),除非您通過設置nullglob選項

shopt -s nullglob

然後,如果目錄為空,則 glob 構造將擴展為一個空列表,這通常是您想要的。

引用自:https://unix.stackexchange.com/questions/553312