편집됨*
내 Bash 스크립트에는 다음과 같은 정의가 있습니다.
DATE_SUFIX=$(date +%F_%H-%M-%S)
NAME="MyBackup_"
FILE_NAME=$NAME$DATE_SUFIX
TMP_DIR="/tmp/"
TMP_BKP=$TMP_DIR$NOME_ARQ"/"
TAR_CMD="tar czPf "
다음과 같은 디렉토리 목록을 만듭니다.
FOLDER_LIST[0]="/opt"
FOLDER_LIST[1]="/etc/apache2/sites-available"
FOLDER_LIST[2]="/home/user"
그런 다음 이 루프를 사용하여 이 목록을 반복합니다.
mkdir $TMP_BKP
for ix in ${!FOLDER_LIST[*]}
do
CMD=$TAR_CMD$TMP_BKP$(basename ${FOLDER_LIST[$ix]})".tar.gz "${FOLDER_LIST[$ix]}"/* "$EXCLUDE
echo $CMD
done
$EXCLUDE 부분을 생성하는 코드도 있습니다. 저도 그렇게 해요. 하지만 이 질문에 대한 코드의 관련 부분은 다음 "${FOLDER_LIST[$ix]}"/*
과 같이 확장되는 CMD 부분입니다.
"/home/user/mybackupfolder/foo /home/user/mybackupfolder/bar ..."
문제는 확장된 하위 폴더 중 하나에 공백이 있다는 것입니다. 이로 인해 다음이 생성됩니다.
"/home/user/mybackupfolder/foo /home/user/mybackupfolder/bar /home/user/mybackupfolder/my spaced dir"
이로 인해 다음 작업이 중단됩니다. 이걸 어떻게 확장할 수 있나요? -
"'/home/user/mybackupfolder/foo' '/home/user/mybackupfolder/bar' '/home/user/mybackupfolder/my spaced dir'"
답변1
(댓글 스레드에서 선택한 답변)
견적이 누락되었거나 잘못 적용된 경우인 것으로 보입니다. 문자열에 따옴표를 넣고 쉘이 결과를 따옴표 붙은 문자열로 해석하도록 할 수는 없습니다.
제발 읽어보시길 권합니다BashFAQ #50: 명령을 변수에 넣으려고 하는데 복잡한 경우에는 항상 실패합니다!도움이 되는지 확인해 보세요.