실패하고 단순화 된 예 :
FLAGS='--archive --exclude="foo bar.txt"'
rsync $FLAGS dir1 dir2
명령이 다음과 같이 따옴표를 포함해야합니다.
rsync --archive --exclude="foo bar.txt" dir1 dir2
짧은 대답 : BashFAQ # 50 참조 ( "변수에 명령을 입력하려고하지만 복잡한 경우는 항상 실패합니다!").
긴 대답 : 명령 (또는 명령의 일부)을 변수에 넣은 다음 그대로 되 돌리는 것은 복잡합니다. 쉘이 명령 줄에서 변수를 확장 할 때 변수가 큰 따옴표 안에 있으면 구문 분석되지 않습니다. 따옴표 안에 있지 않은 경우 공백은 인수 구분으로 구문 분석되지만 따옴표와 이스케이프는 구문 분석되지 않습니다. 두 경우 모두 변수 값에 따옴표를 넣어도 유용하지 않습니다.
일반적으로 이러한 종류의 작업을 수행하는 가장 좋은 방법은 간단한 텍스트 변수 대신 배열을 사용하는 것입니다.
FLAGS=(--archive --exclude="foo bar.txt")
rsync "${FLAGS[@]}" dir1 dir2
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다