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

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

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

예를 들어,

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

.sql에 연결해야 합니다 .$WEBSITE

답변1

변수를 캡슐화하는 데 사용됩니다 ${ }.

중괄호가 없는 경우:

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

답변2

변수 내용을 연결하려는 다른 항목에 연결하기만 하면 됩니다.

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

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

자세한 내용은 다음을 참조하세요.$VAR 대 ${VAR} 및 인용 여부.

답변3

나는 보통 따옴표를 사용합니다(예 : ) echo "$WEBSITE.sql".

따라서 다음과 같이 작성할 수 있습니다.

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

관련 정보