コンテキスト:read -uで専用のfdを使用してファイルの各行に対してコマンドラインを実行します。
関連:https://stackoverflow.com/a/13941223/15603477
while read -u 7 filename;do
ans=
while [ -z "$ans" ]; do
read -p "Process file '$filename' (y/n)? " -sn1 foo
[ "$foo" ] && [ -z "${foo/[yn]}" ] && ans=$foo || echo '??'
done
if [ "$ans" = "y" ]; then
echo Yes
echo "Processing '$filename'."
else
echo No
fi
done 7<file.txt
私は理解できません。する目詰まり:
do
read -p "Process file '$filename' (y/n)? " -sn1 foo
[ "$foo" ] && [ -z "${foo/[yn]}" ] && ans=$foo || echo '??'
done
私はGoogleを検索しましたSN1、良い結果はないようです。-ジ検索も簡単ではありません。
わかりました。
"&&" は、前のコマンドがエラーなしで終了する場合 (より正確には戻りコード 0 で終了する場合) のみ、次のコマンドが実行されるようにコマンドを一緒に連結するために使用されます。
${parameter/pattern/string} パターンはファイル名拡張と同様にパターンを生成するために拡張されます。パラメータが拡張され、パターンとその値と最も長い間一致する項目が文字列に置き換えられます。
しかしここは${foo/[yn]}代替文字列はありません。
答え1
読むman bash
read
-s
サイレントモード。入力が端末から来る場合、文字はエコーされません。
-n nchars
read
読んでから返却してください nchars 文字全体の入力行を待つのではなく、ncharsよりも区切り文字の前に読み取られた文字数が少ない場合は、区切り文字に従います。
このコードはread -p "Process file '$filename' (y/n)? " -sn1 foo
プロンプトを印刷し、入力内容をエコーせずに個々の文字を読み取ります。
-z string
文字列の長さがゼロの場合は真です。
${parameter/pattern/string}
...もしひも空、一致模様これは削除され、/
次のパターンは省略できます。
パスワード[ "$foo" ]&& [ -z "${foo/[yn]}" ]&& ans=$foo || echo '??'
fooがそのうちの1つであることを確認しy
、n
それ以外の場合は「??」を印刷します。