Bash

如何從文件名 glob 創建一個可能為空的數組?

  • February 27, 2018

使用,從(可能為空的)文件名 glob 的結果創建一個可能為空zsh的數組並不困難。例如:

% pathlist=( /no/such/path/*(N) ); printf -- "%d\n" $#pathlist
0

但是,當bashglob 為 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 手冊對nullglobshell 選項進行了以下說明:

如果設置,Bash 允許不匹配文件的文件名模式擴展為空字元串,而不是它們本身。

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