입력에서 값을 내보내야 합니다. 그러나 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
export
shas의 답변은 훌륭합니다. 변수에 값을 할당한 후 변수의 속성을 설정할 필요가 없다는 점을 추가하고 싶습니다 . 이는 스크립트의 주요 흐름을 방해하지 않고 내보낼 수 있음을 의미합니다.
# 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 명령이 중단되면 사용자는 스크립트가 수행하는 작업을 알 수 있습니다.)