셸 스크립트에서 리다이렉션된 인자에 대한 질문

kkb의 이미지

# cat file
filename.c
# echo file is filename.c > data

위와 같이 cat file을 실행하여
출력되는 파일의 이름을 "file is filename.c"라는 문자열로
다시 data 파일에 저장하고 싶습니다

스크립트를 사용하여 위와 같이 실행하려면

filename=`cat file`
echo file is $filename > data

위와 같이 할 수도 있을 것 같습니다

되도록이면 한 줄에 실행했으면 좋겠습니다
리다이렉션을 두 번 하면 될 거 같은데
;를 사용하여 한 줄에 실행하는 것 말고요

어떻게 할 수 있을까요?

그리고, 리다이렉션할 때 리다이렉션 되는 위치를 정해줄 수도 있나요?
예를 들어서,

# cat file
filename.c
# cp original.c filename.c
(혹은)
# cp filename.c copy.c

위와 같은 실행을 원할 때, 각각
# cat file | cp original.c ???
(혹은)
# cat file | cp ??? copy.c

해야 하는데 ???와 같이 리다이렉션되어 넘어오는 인자의 위치를 어떻게 지정할 수 있나요?
planetarium의 이미지

$ echo file is `cat file` > data
$ cp original.c `cat file`
$ cp `cat file` copy.c
kkb의 이미지

답변 감사합니다

# cat file | cp original.c ???
(혹은)
# cat file | cp ??? copy.c

답변주신 스크립트 처럼 쓸 수도 있겠지만
위에서 ???를 대체할 수 있는 특수변수가 있지 않나요?
예전에 어렴풋이 봤던 기억이 있는데...