입력 변수에서 값 도출

입력 변수에서 값 도출

입력에서 값을 내보내야 합니다. 그러나 bash에서는 실패합니다.

코드는 다음과 같습니다.

echo "Please enter HOST :"
read RDSHOST && export RDSHOST

내 가치는 다음과 같습니다 - myserver.abc-zone5.com

스크립트를 실행할 때 이 오류가 발생합니다 - 일치하는 "" 구문 오류를 찾는 동안 예기치 않은 EOF: 예기치 않은 파일 끝

이 오류를 방지하려면 큰따옴표를 사용하여 변수를 내보내는 방법을 알아야 합니다.

답변1

echo "Please enter REGION to login :" 
read region && export region 
echo "Please enter HOST to login :" 
read HOST && export HOST
echo "Please enter Port to login :" 
read localport && export localport
echo "Please enter username to login : " 
read username && export username sql "host=$HOST port=$localport user=$username --region=$region"

echo "username sql \"host=$HOST port=$localport user=$username --region=$region\""

산출:

Please enter REGION to login :
ASIA
Please enter HOST to login :
localhost
Please enter Port to login :
6000
Please enter username to login : 
foo
username sql "host=localhost port=6000 user=foo --region=ASIA"

답변2

exportshas의 답변은 훌륭합니다. 변수에 값을 할당한 후 변수의 속성을 설정할 필요가 없다는 점을 추가하고 싶습니다 . 이는 스크립트의 주요 흐름을 방해하지 않고 내보낼 수 있음을 의미합니다.

# prep for user input
export region
export HOST
export localport
export username

# prompt user for input
echo 'Please enter REGION to login :'
read region
echo 'Please enter HOST to login :'
read HOST
echo 'Please enter Port to login :'
read localport
echo 'Please enter username to login :'
read username

# show and invoke the sql command
echo "sql \"host=$HOST port=$localport user=$username --region=$region\""
sql "host=$HOST port=$localport user=$username --region=$region"

또한 export여러 변수의 이름을 사용하여 속성을 설정할 수 있으므로 코드의 이 부분을 더 짧게 만들 수 있습니다.

# prep for user input
export region HOST localport username

# prompt user for input
echo 'Please enter REGION to login :'
read region
echo 'Please enter HOST to login :'
read HOST
echo 'Please enter Port to login :'
read localport
echo 'Please enter username to login :'
read username

# show and invoke the sql command
echo "sql \"host=$HOST port=$localport user=$username --region=$region\""
sql "host=$HOST port=$localport user=$username --region=$region"

(또한 변수를 확장하지 않고 sql 명령을 호출하기 전에 에코하지 않기 때문에 프롬프트 문자열을 작은따옴표로 묶습니다. 따라서 sql 명령이 중단되면 사용자는 스크립트가 수행하는 작업을 알 수 있습니다.)

관련 정보