私はシェル スクリプトに関しては比較的初心者ですが、プログラミングに関してはそうではありません。
while
Bashスクリプトのバグの真相を突き止めようとして、サブシェルの問題を回避するために、プロセス置換と「here文字列」をループに供給するSTDINの使用の3つの短い例を思いつきました。
find
異常なファイル名文字との潜在的な闘争を避けるために、出力をヌル区切りにしています。
この例はうまく機能し、ルートにあるすべてのフォルダーの名前を出力します。
#!/bin/bash
while IFS= read -r -d '' y; do echo "${y}"
done < <(find / -type d -maxdepth 1 -mindepth 1 -printf "%P\0" | sort -z)
この例もうまく機能します:
#!/bin/bash
find / -type d -maxdepth 1 -mindepth 1 -printf "%P\0" | sort -z | \
{ while IFS= read -r -d '' y; do echo "${y}"; done }
しかし、この場合、find
出力を文字列に保存し、x
それを「ここの文字列」のソースとして使用しようとすると、何も出力されません。
#!/bin/bash
x=$(find / -type d -maxdepth 1 -mindepth 1 -printf "%P\0" | sort -z)
while IFS= read -r -d '' y; do echo "${y}"; done <<< "${x}"
ここで見逃している繊細さ (または私の部分の密度) は何ですか?
GNU bash 4.1.7(2) リリースを使用しています。