我有以下目錄結構
./a/unknown.txt
./b/unknown.txt
我想要實作的是
cat {a,b}/*.txt
問題是我事先不知道a,b而是我將它們放在這樣的陣列中
dirs=(a b)
現在,我正在嘗試cat ${dirs[@]}/*.txt,但它不起作用。我也嘗試過其他的變體,但沒有成功。我得到的最接近的是cat ${dirs[@]/%//*.txt},但這并沒有擴展*. 在開頭添加eval可以解決問題,但我覺得需要一種更聰明的方法。
我知道我可以遍歷dirs并實作我想要的,但我對這個解決方案不感興趣。
uj5u.com熱心網友回復:
#!/bin/bash
dirs=(a b)
shopt -s extglob
ls @(`echo ${dirs[@]} | tr ' ' '|'`)/*
uj5u.com熱心網友回復:
如果將它們放在陣列中,為什么不遍歷陣列,這將是最清楚的:
for f in "${dirs[@]}"
do
cat "$f"/*.txt
done
如果你真的不喜歡回圈(為什么?)你可以用一個命令來做:
find "${dirs[@]}" -maxdepth 1 -name '*.txt' -exec cat {} \;
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/410231.html
標籤:
