パイプ後の変数の内容を保持する方法

パイプ後の変数の内容を保持する方法

私は次のスクリプトを持っています

#!/bin/bash
file="$1"
cat $file
n=$(cat $file | wc -l)
cat $file

cat some_file.txt | myScript.sh 最初のものはファイルの内容を出力し、2 番目のものは出力しないように使用しますcat。パイプの後の変数の内容を保持するにはどうすればよいでしょうか?

答え1

これは、あなたが考えていることを実行しません。$1はスクリプトに渡す最初のパラメータですが、実際には何も渡していません。つまり、 はcat $file実際には単独になりますcat。引数を指定しない場合は、cat入力を印刷するだけです。

$ echo "foo" | cat
foo

つまり、最初のコマンドcatは入力、つまりファイルの内容を出力します。2 番目のコマンドは、最初のコマンドですべて取得されているため入力がないので、何もしません。やりたいことは次のようになります。

myscript.sh file

これにより、ファイルの内容が 2 回出力され、 の出力がcat $file |wc変数 に保存されますn


ファイルの内容を に保存したい場合は$file、次を試してください。

file="$(cat < "$1")"

ファイル名を引数としてスクリプトを実行します。

script.sh file

関連情報