我正在创建一个备份功能来复制具有特定扩展名扩展名的所有文件。
files()
在找不到文件结果时返回'*'
'+'
'./'
,因此我尝试使用{{来避免无效的cp [* | + | ./] /backup
1}}但它仅适用于if
。
*
答案 0 :(得分:2)
files=( "$sp" + *."$ext" )
看起来不对; +
将成为arrey的第二个元素。你可能想要
files=( "$sp"/*."$ext" )
!= *
可以省略对shopt -s nullglob
的检查。
case
语句可能比您的||
链(应该是&&
)更具可读性:
case $f in
./|\+|\*) ;;
*) cp "$f" "$bp/" ;;
esac
答案 1 :(得分:1)
您需要使用&&
(and
)。
这是因为如果结果不是*
,+
或./
,您只想打印文件。这意味着您要确保所有这三个条件都是False
,并且执行此操作的方式是使用&&
。
目前,您的代码无效,因为它首先检查结果是否不等于*
。如果此条件为True
,则无需评估其他两个条件,因此bash
将转到下一行代码(在您使用or
时忽略其他条件)。