在脚本中使用变量进行 Grep

在脚本中使用变量进行 Grep

我有此代码,它返回名为 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 特殊字符(*在您的情况下)必须是外部双引号以便展开。但是,您需要将变量括在双引号中,以防它们包含任何空格。

相关内容