다음과 같이 스크립트에 변수를 추가하려고 합니다.
ssh root@$dev 'cat /etc/hosts > /var/tmp/hosts_$dev_$(date +%F)'
그러나 이것은 작동하지 않습니다.
/var/tmp/hosts\_$dev\_$(date +%F)'
/var/tmp/hosts_${dev}_$(date +%F)'
누군가 나를 도울 수 있습니까? 내가 무엇을 하든 결과는 여전히 동일합니다.
hosts_2017-06-20
향후 사용을 위한 해결 방법:
다음과 같이 큰따옴표 대신 작은따옴표를 사용합니다.
ssh root@$dev "cat /etc/hosts > /var/tmp/hosts\_$dev\_$(date +%F)"
답변1
허락해줘이 멋진 질문을 인용해 보세요Stackexchange의 다른 사이트에서 이미 답변된 질문을 다시 설명할 필요가 없도록 답변을 선택하세요. 다음 부분입니다bash(1)
변수 참조와 관련된 맨페이지:
문자를 작은따옴표(
'
)로 묶으면 따옴표 안의 각 문자의 리터럴 값이 유지됩니다. 앞에 백슬래시가 있더라도 작은따옴표 사이에는 작은따옴표를 사용할 수 없습니다.문자를 큰따옴표( )로 묶으면 , 및 (기록 확장이 활성화된 경우)를 제외한 따옴표 안의 모든 문자의 리터럴 값이 유지됩니다
"
. 이러한 문자는 큰따옴표 안에 특별한 의미를 유지합니다(참조:$
`
\
!
$
`
쉘 확장). 백슬래시는 뒤에$
,`
,"
또는\
개행 문자 중 하나가 오는 경우에만 특별한 의미를 유지합니다 . 큰따옴표 내에서 이러한 문자 중 하나 뒤에 오는 백슬래시가 제거됩니다. 특별한 의미가 없는 선행 백슬래시 문자는 변경되지 않습니다. 큰따옴표 앞에 백슬래시를 추가하면 큰따옴표 안에 큰따옴표를 넣을 수 있습니다. 활성화되면!
큰따옴표 안에 표시되는 내용이 백슬래시를 사용하여 이스케이프되지 않는 한 기록 확장이 수행됩니다 . 앞의 백슬래시는!
제거되지 않습니다.특수 매개변수는
*
큰@
따옴표로 묶인 경우 특별한 의미를 갖습니다(참조쉘 매개변수 확장).
답변:이것이 바로 개체 파일에 $dev
해당 변수의 내용이 있는 이유입니다.