명령 행에서 쉘 변수를 다른 매개 변수에 어떻게 연결할 수 있습니까?


16

명령 행에서 쉘 변수를 다른 매개 변수에 연결하려면 어떻게해야합니까?

예를 들어

#!/bin/sh
WEBSITE="danydiop" 
/usr/bin/mysqldump --opt -u root --ppassword $WEBSITE > $WEBSITE.sql

나는 연결해야 .sql합니다$WEBSITE

답변:


26

${ }변수를 묶는 데 사용 합니다.

중괄호없이 :

VAR="foo"
echo $VAR
echo $VARbar

줄 것이다

foo

변수 $VARbar가 존재하지 않기 때문에 아무것도 없습니다 .

중괄호 :

VAR="foo"
echo ${VAR}
echo ${VAR}bar

줄 것이다

foo
foobar

첫 번째를 둘러 쌀 $VAR필요는 없지만 좋은 습관입니다.

예를 들어 :

#!/bin/sh
WEBSITE="danydiop" 
/usr/bin/mysqldump --opt -u root --ppassword ${WEBSITE} > ${WEBSITE}.sql

이 작품 bash, zsh, ksh, 어쩌면 다른 사람도.


3
이것은 모든 Bourne 스타일 쉘 (Bourne, POSIX, bash, ksh, zsh), C 스타일 쉘 (csh, tcsh) 및 중괄호가없는 물고기에서도 작동합니다. 따라서 유닉스 쉘에서 보편적입니다. 나는 중괄호를 좋은 연습이라고 부르지 않을 것입니다. 그러나 변수 대체 모범 사례 주위에 큰 따옴표를 사용하여 체계적으로 호출합니다.
Gilles 'SO- 악마 그만해'

1
@Gilles, 나는 더 나아가서 변수 대체에 큰 따옴표를 사용 하지 않는 것이 매우 나쁜 습관 .
Stéphane Chazelas

또한 ${ }어떤 의미로도 연결되지 않은 주의를 기울이십시오 . 예를 들어 ELP=elp && echo $ELP && man --h${EPL}작동하지 않습니다.
foki 2016 년

4

변수 내용을 원하는 다른 것으로 연결하십시오.

/usr/bin/mysqldump --opt -u root --ppassword "$WEBSITE" > "$WEBSITE.sql"

큰 따옴표는 연결과 관련이 없습니다. 여기 >$WEBSITE.sql에서도 효과가 있었을 것입니다. 변수 값에 쉘 특수 문자 (공백 및 \[?*) 가 포함될 수있는 경우 변수 확장에 필요합니다 . 모든 변수 확장 및 명령 대체에 큰 따옴표를 사용하는 것이 좋습니다 . 즉 항상 write "$WEBSITE""$(mycommand)".

자세한 내용은 $ VAR vs $ {VAR} 및 인용 또는 인용 안함을 참조하십시오 .


2

나는 보통 따옴표를 사용한다 echo "$WEBSITE.sql".

따라서 다음과 같이 쓸 수 있습니다.

#!/bin/sh
WEBSITE="danydiop" 
/usr/bin/mysqldump --opt -u root --ppassword $WEBSITE > "$WEBSITE.sql"

3
.변수 이름에 유효한 문자가 아니기 때문에 작동 합니다. 유효한 문자로 시작하는 문자열을 연결하려면 wag의 답변을 참조하십시오 (예 : "$ WEBSITEsql"이 작동하지 않음)
Michael Mrozek
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.