grepのようなスクリーン印刷を処理するスクリプトが欲しい。
次のように実行できます。 cat file.txt私のスクリプト
以下のスクリプトを試しましたが、何も印刷されませんでした。
#!/bin/bash
line=$@
echo $line
答え1
@glemcoの答えと同じ考えですが、このバージョンは特殊文字(NULLバイトを除く)に対して安全でなければなりません。
#!/bin/bash
while IFS= read -r line
do
printf '%s\n' "$line"
done
IFS=
先行スペースと末尾のスペースが切り捨てられるのを防ぐためです。-r
バックスラッシュエスケープ処理を防ぐために使用されます。"
二重引用符は、"$line"
グローバル拡張を防ぎ、スペースシーケンスが単一のスペースで置き換えられるのを防ぐためのものです。
答え2
コマンドライン引数()で読み込もうとしていますが$@
、で読み込む必要がありますstdin
。デフォルトでは、パイプは最初のコマンドをstdout
2番目のコマンドに追加しますstdin
。 Bashで目的の操作を実行する簡単な方法は、read
例に示すように組み込みコマンドを1行ずつ使用することです。
#!/bin/bash
while read line
do
echo $line
done
もちろん、エコなしで欲しいものは何でもできます。