2016-07-24 4 views
0

중첩 달러 변수를 포함하는 bash는 스크립트를 작성하려고 인용하고 난 일하러 수 없습니다중첩 된 달러 기호 안에

#!/bin/bash 
sed '4s/.*/$(grep "remote.*$1" /home/txtfile)/' /home/target 

오류가 말한다 :

나오지도/-e 표현 # 1, char 30 : 's'에 대한 알 수없는 옵션

문제는 $ 1에서 bash 호출에서 전달 된 매개 변수로 바꿔야 할 필요가있는 것 같습니다. $(...)을 명령 호출로 대체해야하므로 대상 행 4를 문자열 출력으로 바꿉니다.

답변

0

작은 따옴표 안에 넣을 때 변수 확장 및 명령 대체가 수행되지 않습니다 대신 큰 따옴표를 사용

sed "4s/.*/$(grep "remote.*$1" /home/txtfile)/" /home/target 
+0

다양한 입력 값 및/또는에서 실행 디렉토리의 내용 주어진 코 악마를 생성합니다 :이 같은 (당신이 우리를 표시하지 않은 사용자 수 $1 값과 입력 파일 내용에 따라) 'remote. * $ 1'은 un이기 때문에 인용했다. –

0

귀하의 접근 방식은 잘못된 것입니다, 당신이 원하는 것을 할 수있는 올바른 방법은 단 하나 개의 명령입니다,

awk -v tgt='remote.*$1' ' 
NR==FNR { if ($0 ~ tgt) str = str $0 ORS; next } 
FNR==4 { printf "%s", str; next } 
{ print } 
' /home/txtfile /home/target