如何在 bash 文件夹扩展中包含单引号?

如何在 bash 文件夹扩展中包含单引号?

已编辑*

我的 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:我试图将命令放入变量中,但复杂的情况总是失败!看看是否有帮助。

相关内容