
.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
ファイル名に改行文字が含まれていても中断されません(残念ながら改行文字はファイル名に有効な文字です)。