現在のフォルダーからすべての.txtファイルの名前を1行で印刷しようとしています。次のスクリプトを使用しています。ただし、ファイル名は印刷されません。
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}"
現在のフォルダー(A.txt、B.txt ...)に3〜4個の.txtファイルがあります。私は出力を期待しています
完全なシーケンス:A.txt B.txt ...
変数RED_SEQ
に出力を割り当てずにfind
コマンドを使用するだけで、目的の出力が得られます。これは、findコマンドが正常に機能していることを示唆していますが、どういうわけかそれを変数に割り当てることができません。さまざまな代入演算子を試しましたが、まだうまくいきませんでした。
bash
の変数を更新するには、次の構文を使用する必要があります。
VAR="some stuff$VAR"
ただし、パイプを使用しているため、while
ループはサブシェルで実行され、変数は失われます。
これを修正するには、次の構文が必要です。
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}"
問題は、パイプ記号の後ろに{}を使用することです。これは、findの-execオプションでのみ有効ですが、パイプ記号の後ろでは有効ではありません。
以下を試すことができます:
REF_SEQ = $(find。-maxdepth 1 -name "* .txt" -type f -printf "%f" | xargs)
これにより、希望どおりの結果が得られます。 printf-directive%fは、見つかったファイルのベース名を出力し、xargsは結果を「転置」します。
ユルゲンよろしく