Bash
如何從文件名 glob 創建一個可能為空的數組?
使用,從(可能為空的)文件名 glob 的結果創建一個可能為空
zsh
的數組並不困難。例如:% pathlist=( /no/such/path/*(N) ); printf -- "%d\n" $#pathlist 0
但是,當
bash
glob 為 null 時,我可以對上面的程式碼提出的最接近的近似值無法生成空數組:% pathlist=( /no/such/path/* ); printf -- "%d\n" ${#pathlist[@]} ) 1
在這種情況下,
pathlist
變數包含一個條目,即字元串“/no/such/path/*”。如何修改
bash
程式碼,以便每個與 glob 匹配的pathlist
文件(如果有)都包含一個條目?
您需要使用 shell 選項
nullglob
#!/bin/bash shopt -s nullglob pathlist=( /no/such/path/* ); printf -- "%d\n" "${#pathlist[@]}" ) shopt -u nullglob
Bash 手冊對
nullglob
shell 選項進行了以下說明:如果設置,Bash 允許不匹配文件的文件名模式擴展為空字元串,而不是它們本身。