Bash 脚本如何扩展文件全局?

Bash 脚本如何扩展文件全局?

在此代码中,excludespec变量应该匹配其所有子字符串,但它似乎在执行时评估与其匹配的实际文件,而不是将其精确表示传递给使用它的 tar 命令。

excludespec=${PWD##*/}\_$USER\_主机名.bkcd_backup*

最终结果是正在创建的档案与排除列表不匹配,因此 tar 输出:

tar: .: file changed as we read it

定义它的字符串是否在做一些我不知道的事情?

以下是代码:

#!/bin/sh
# bkcd - backup current directory in situ

DMY_M() {
  date +%Y%m%d_%H%M
}

timestring=$(DMY_M)
echo `pwd` - $timestring > .bkcdspec  
filename=${PWD##*/}\_$USER\_`hostname`.bkcd_backup.$timestring.tar.gz    
excludespec=${PWD##*/}\_$USER\_`hostname`.bkcd_backup*
fullexclude="$excludespec"tar.gz    
echo excludespec - $excludespec
echo filename - $filename
echo fullexclude - $fullexclude    
tar -cpzf $filename --exclude=$fullexclude .
rm .bkcdspec

答案1

通配符是在变量替换后完成的。要粘贴替换的文字值但防止通配符,请在$var引用周围使用双引号。

相关内容