如何在管道后保留变量的内容

如何在管道后保留变量的内容

我有以下脚本

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

我使用它的方式是cat some_file.txt | myScript.sh 第一个cat输出文件的内容,而第二个则不输出。如何在管道之后保留变量的内容?

答案1

这并没有做你认为它正在做的事情。这$1是您传递给脚本的第一个参数,但您实际上没有传递任何参数。这意味着cat $file实际上变得cat孤独。当没有给出任何参数时,cat将只打印其输入:

$ echo "foo" | cat
foo

因此,第一个cat打印出输入,即文件的内容。第二个没有输入,因为所有内容都已被第一个获取,因此它什么也不做。你想做的是这样的:

myscript.sh file

这将打印出文件的内容两次,并将输出保存cat $file |wc在变量中n


如果您想要将文件的内容保存在 中$file,请尝试:

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

并使用文件名作为参数运行脚本:

script.sh file

相关内容