Bourne-Shell

如何解決路徑的正確結局?

  • July 25, 2012

我有一個持有這條路徑的 shell 變數

/usr/share/man/man1/bitmap.1

可能有一個名為 bitmap.1 的文件,但也可能是 bitmap.1.z、bitmap.1.gz、bitmap.1.Z。

現在我想將真實文件傳遞給一個函式,同時解析正確的文件,比如

function process {
   # do something
}

path="/usr/share/man/man1/bitmap.1"

process ${path}.(z|Z|gz) # here the shell shall resolve the real filename

有沒有辦法優雅地做到這一點,或者我必須測試 bitmap.1、bitmap.1.z 等是否退出,然後將該文件傳遞給函式???


忘了說我僅限於 Bourne-Shell,所以手頭沒有 Brace Expansion -,-。

您仍然可以在 Bourne Shell 中進行 globbing

for f in ${given-path}*; do
process $f
done

盡可能多地編寫 shell 腳本以限制 Bourne shell 語法是個好主意;最大限度地提高便攜性。在許多情況下,它還可以提高速度。

如果您知道可能的副檔名列表,您可以執行以下操作:

process ${path}{,.Z,.Z,.gz}

引用自:https://serverfault.com/questions/104586