
我正在嘗試在一行中列印當前資料夾中所有 .txt 檔案的名稱。我正在使用以下腳本。但是,它不列印文件名。
REF_SEQ=""
find . -name "*.txt" -maxdepth 1 -type f |
while read f;
do
name=$(echo ${f}| xargs -I {} basename {} )
REF_SEQ+="${name} "
done
echo "Full Sequence: ${REF_SEQ}"
我的目前資料夾中有 3-4 個 .txt 檔案(A.txt、B.txt ...)。我期望輸出為
完整序列:A.txt B.txt ...
如果我只使用find
命令而不將輸出分配給變量RED_SEQ
,我確實會得到所需的輸出。這表明 find 命令工作正常,但不知何故我無法將其分配給變數。我嘗試了各種不同的賦值運算符,但仍然沒有運氣。
答案1
要更新 中的變量bash
,必須使用以下語法:
VAR="some stuff$VAR"
但是,由於您使用的是管道,while
循環是在子 shell 中執行的,因此變數會遺失。
要修正此問題,您必須具有以下語法:
while read f
do
done <<< $(input)
所以在你的情況下:
REF_SEQ=""
while read f;
do
name=$(echo ${f}| xargs -I {} basename {} )
REF_SEQ="${REF_SEQ}${name} "
done <<< $(find . -name "*.txt" -maxdepth 1 -type f)
echo "Full Sequence: ${REF_SEQ}"
答案2
問題是,您在管道符號後面使用了 {}。這僅在 find 的 -exec 選項中有效,但在管道符號後面無效。
您可以嘗試以下操作:
REF_SEQ=$(查找 .-maxdepth 1 -name "*.txt" -type f -printf "%f " | xargs)
這應該會產生您想要的結果。 printf 指令 %f 輸出找到的檔案的基名,並且 xargs “轉置”結果。
親切的問候於爾根