我有以下脚本
#!/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