如何在管道後保留變數的內容

如何在管道後保留變數的內容

我有以下腳本

#!/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

相關內容