파이핑 후 변수의 내용을 보존하는 방법

파이핑 후 변수의 내용을 보존하는 방법

다음 스크립트가 있습니다

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

관련 정보