2014-05-22 2 views
2

bash에서 백틱에 사용되는 유효한 명령은 무엇입니까?

echo ${command1} -> mysql -umyuser -pmypassword -e "show databases;"; 
echo ${command2} -> cat stackoverflow.txt 

내 목표는 변수에서 명령을 실행하고 다른에서 결과의 저장하는 것입니다, 다음과 같이

command1="mysql -umyuser -pmypassword -e \"show databases;\";" 
command2="cat stackoverflow.txt" 

문자열이 형성되고, 두 개의 명령을 고려하십시오.

그래서 내가 뭘,

result1=`${command1}` 
ERROR 1049 (42000): Unknown database 'databases;";' 

하지만,

result2=`${command2}` 

작품을 완벽하게 괜찮습니다.

백틱 대신 $()을 사용하면 명령이 동일하게 작동합니다.

변수 대신 역 인용 부호로 직접 실행하면이 두 명령이 완벽하게 작동합니다.

왜 이렇게 다른 행동입니까?

답변

2

다음 :

command1="mysql -umyuser -pmypassword -e \"show databases;\";" 

때문에 단어 분할 실패합니다.

mysql -umuuser -pmypassword -e '"show' 'databases;";' 

그래서 -e 옵션에 전달 된 매개 변수는 무슨 생각을 "show 및되지 않습니다 : 당신이 $command1을 말할 때로, 쉘은 그것을 해석하는 것입니다. 대신 기능

만들기 사용 : 두 번째 경우

mycommand() { 
    mysql -umyuser -pmypassword -e "show databases;" 
} 

는, 쉘은 단순히 파일의 내용을 읽고 그것을 실행된다. 따라서, 그것은 작동합니다.

설명서의 Word Splitting을 참조 할 수도 있습니다. 참조 : I'm trying to put a command in a variable, but the complex cases always fail!.

관련 문제