リストを繰り返し、シェルスクリプトの find コマンドで返します。

リストを繰り返し、シェルスクリプトの find コマンドで返します。

.csvディレクトリ内のファイルを見つけ、その名前をシェルスクリプトの変数に割り当てたいと思います。

次のコードを書きました。

x="$(find extracted_data/*.csv)"
echo "$x"
IFS = $'\n'
for i in "${x[@]}"; do
        echo "${i}"
done

ただし、このコードを実行すると、次の結果が表示されます。

extracted_data/another_file.csv 
extracted_data/sample.csv 
sheet.sh: 4: IFS: not found 
sheet.sh: 5: Bad substitution

これらの2つのエラーが発生するため、コードにはどのような問題がありますか?

コードを取得するには、次の2つのリンクをたどりました。 findから返されたファイル名を繰り返します。そして配列用

ベストアンサー1

まず、次の推奨事項をもう一度申し上げます。findループ出力なし

これで問題を解決するには、スクリプトに非常に単純な構文エラーがあります。変数の割り当て

IFS = $'\n'

必然ではないロゴの周りにスペースがあります=。シェル変数の割り当ては、次の形式でなければなりません。

IFS=$'\n'

確認したいかもしれませんshellcheckこれらのエラーを防ぐために、多くのLinuxディストリビューションでスタンドアロンツールとしても使用できます。

その意味は、単に宣言することで、達成しようとしている作業をより簡単でエラーの少ない方法で実行できます。

for x in extracted_data/*.csv
do
  echo "$x"
done

ファイル名に改行文字が含まれていても中断されません(残念ながら改行文字はファイル名に有効な文字です)。

おすすめ記事