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

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

다음 스크립트가 있습니다

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

관련 정보