已编辑*
我的 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
(从评论线程中挑选的答案)
这似乎是引号丢失或错误应用的情况。您不能将引号放入字符串中并使 shell 将结果解释为带引号的字符串。
请我建议您阅读BashFAQ #50:我试图将命令放入变量中,但复杂的情况总是失败!看看是否有帮助。