Bash 스크립트에서 다음을 시도하고 있습니다.
MV_PARAMS='"foo 1" "foo 2"'
mv $MV_PARAMS
제가 실제로 하고 싶은 일은 다음과 같습니다.
mv "foo 1" "foo 2"
그러나 이것은 작동하지 않는 것 같습니다. 이 시도:
mv "$MV_PARAMS"
아니요.
답변1
당신이 해야 할 일은 배열을 사용하는 것입니다:
mv_params=("foo 1" "foo 2")
mv "${mv_params[@]}"
배열 확장은 공백이나 특수 문자가 포함된 배열 요소를 올바르게 처리합니다.
답변2
쉘 스크립트에서 파일 이름의 공백을 처리하는 것은 복잡한 경우가 많습니다. 이 경우 다음이 주어집니다.
MV_PARAMS='"foo 1" "foo 2"'
당신이 쓸 때 :
mv $MV_PARAMS
최종 쉘은 mv
다음과 같이 실행됩니다:
execve("/usr/bin/mv", ["mv", "\"foo", "1\"", "\"foo", "2\""])
즉, 4개의 매개변수가 있습니다.
- "부자
- 1"
- "부자
- 2 인치
eval
다음을 사용하여 쉘이 생성된 명령줄을 구문 분석하도록 할 수 있습니다 .
eval "mv $MV_PARAMS"
이것은 당신이 원하는 것을 할 것입니다. 때로는 사용하기 eval
까다로울 수 있으며 , eval
이것이 해결책인 것처럼 보이는 상황에서는 종종 필요하지 않도록 무언가를 다시 작성하려고 합니다.