echoを使用してタイプ "-diary.txt-"のファイルを読み取るには?

echoを使用してタイプ "-diary.txt-"のファイルを読み取るには?

"-diary.txt-"というファイルがあり、その内容をインポートする必要があります。を使用して読み込もうとすると、空のecho < "-diary.txt-"文字列が返されます。私はいくつかの調査を行い、次の結論を下しましたecho "$(<-diary.txt-)"。私のコンピュータでテストしましたが、うまくいきますが、サーバーにログインしても空の文字列が返されます。次のコマンドのみ使用できます . : [ [[ alias bg break cd chdir command continue echo eval exec exit export false fg getopts hash help history jobs kill let local printf pwd read readonly return set shift source test times trap true type ulimit umask unalias unset wait。どうすればいいですか?

答え1

$(<file)zshはKornシェルの特別な構成であり、これはandを含む他のいくつかの構成でもサポートされていますが、bashそれはすべてです(参照:Bashのファイル読み取りコマンドの置き換えについて)。

これをサポートしていないPOSIXに似たシェルでは、何も拡張されません。

コマンドのリストを見ると、便利な方法でしかread入力できないようです。何も読み取られず、オプションの処理と変換後に引数だけを出力します。readecho

while IFS= read -r line || [ -n "$file" ]; do
  printf '%s\n' "$line"
done < -diary.txt-

一度に1行ずつ読み、各行を印刷する必要があります。printfecho任意のデータで使用できないわけではありません)。ここで使用される3つのコマンド([、、readおよび)はすべてprintfリストにあり、while; do; doneシェル||言語の設定です。

ファイルに NUL 文字が含まれていない限り、これは機能します。ファイルが改行文字で終わらない場合は、出力に追加されます。

シェルはPOSIX-shに似ていると仮定しますが、コマンドリスト(ほとんどsh組み込み)を考慮するとこれが可能です。


1、.別名sourceファイルを読み取ることもできますが、読み取った内容をシェルコードとして解釈しようとするので役に立ちません。

関連情報