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