Bash에서 복사하는 데 문제가 있습니다. 이것은 잘 작동합니다:
# Enable extended globbing and include filenames beginning with a '.'
shopt -s extglob dotglob
# Copy git repo to expected place
cp -r !($YOCTO_DIR) $POKY_DIR/$GIT_REPO_NAME/
그러나 if
내가 이것에 대해 진술할 때:
if [ -z "$FROM_JENKINS" ]; then
# FROM_JENKINS is blank, this is a local build
# Enable extended globbing and include filenames beginning with a '.'
shopt -s extglob dotglob
# Copy git repo to expected place
cp -r !($YOCTO_DIR) $POKY_DIR/$GIT_REPO_NAME/
fi
나는 얻다:
./build.sh: line 80: syntax error near unexpected token `('
80행은 cp
괄호를 제거하면 작동합니다.
cp -r . $POKY_DIR/$GIT_REPO_NAME/
if
명령문이 괄호 안의 명령문과 같지 않은 이유는 무엇 입니까 cp
?
답변1
문제는 읽고 실행하는 순서와 '범위'입니다.
전체 if
블록은 단지 명령일 뿐입니다. 따라서 쉘은 명령을 실행하기 전에 명령을 읽어야 합니다.
이것은 규칙을 의미한다아니요 shopt -s extglob dotglob
(여기서 모든 내용이 아닌 줄을 언급하고 있습니다. ilkkachu가 주석에서 지적했듯이: dotglob
질문과 관련이 없습니다.) if
블록이 끝날 때까지만 유효합니다. 왜냐하면 블록 shopt
이 끝난 후에만 실행되기 때문입니다. 그렇지 않다면 불법 shopt -s extglob
입니다 !(
.
shopt
따라서 이전 으로 이동해야 합니다 if
(및 else
분기에서 되돌릴 수도 있음).