GNU bash、バージョン 4.4.19(1)-リリース(x86_64-pc-linux-gnu)
アイデアは、変数をNULで区切られたデータセットに設定することです。ここ$samples
しかし、結果は次のようになります。
警告:コマンドの置換:入力のnullバイトを無視します。
次のように扱う:
samples="$(find . -type d -iregex './sample[0-9][0-9]' -printf "%f\0" | sort -z)"
同じ値を何度も繰り返す必要があるため、この変数を再利用できると思いました。
while IFS= read -rd '' sample; do
echo $sample
done<<< "$samples"
私も\n
入ることができます。\0
探すこの場合、コマンドを実行しますが、可能であればNUL区切り文字を使用してこれを行う一般的な方法を知りたいです。
私は以下を選択できます。
while IFS= read -rd '' sample; do
echo $sample
done< <(find . -type d -iregex './E[0-9][0-9]' -printf "%f\0" | sort -z)
しかし - 何度も繰り返す必要があるため、非常に重複するコードを生成して実行する必要があります。探すそしてタイプ毎回コマンドを発行します。
結果を配列に変換しますか?
- 可能ですか?
- NULを使用してデータをそのまま分離できないのはなぜですか?
ベストアンサー1
実際、\0
デフォルトのC実装のため、bash文字列コンテキストにnullバイトを格納することはできません。バラより$'\0' または $'\x0' が空の文字列であるのはなぜですか。 null 文字でなければなりません。そうですか?。
1つのオプションは、sortコマンドの後にnullバイトを削除し、tr
結果を使用してパイプの末尾に保存して警告メッセージを投げる即時の問題を解決することです。ただし、改行を含むファイル名はまだ混乱しているため、まだロジックに欠陥があります。
配列を使用すると、mapfile
orコマンド(bash 4.4+)を使用してコマンドのreadarray
結果を直接取得できます。find
IFS= readarray -t -d '' samples < <(find . -type d -iregex './sample[0-9][0-9]' -printf "%f\0" | sort -z)