我有此代码,它返回名为 wordpress.*.tar.gz 的目录中的文件数
此代码有效NUM_BACKUPS="$(ls -l ${POOL_PATH}/${BACKUP_PATH} | grep -c '\wordpress.*.tar.gz$')"
但我想用 bash 脚本中的变量替换 wordpress
我试过了NUM_BACKUPS="$(ls -l ${POOL_PATH}/backup/${JAIL} | grep -c '\${JAIL}.*.tar.gz$')"
但它不起作用
答案1
${JAIL}
在参数中没有展开,grep
因为它在单引号中。你可以将单引号换成双引号(并改为\$
)$
,但这有点脆弱。更强大的解决方案是完全使用通配符和 bash 数组来实现这一点:
shopt -s nullglob
BACKUP_FILES=( "${POOL_PATH}/backup/${JAIL}/${JAIL}"*.tar.gz )
NUM_BACKUPS=${#BACKUP_FILES[@]}
您需要nullglob
处理 glob 不匹配任何文件的情况。如果没有,如果您没有任何文件,则nullglob
最终会将其设置为 1。NUM_BACKUPS
请注意,glob 特殊字符(*
在您的情况下)必须是外部双引号以便展开。但是,您需要将变量括在双引号中,以防它们包含任何空格。