无法在bash中输入日期变量

时间:2018-09-30 08:53:44

标签: linux bash awk

我有一个目录/ user / reports,该目录下有许多文件,其中一个是:

report.active_user.30092018.77325.csv

我需要输出日期后的数字,即上面文件名中的 77325

我创建了以下命令,以从文件名中查找值:

ls /user/reports | awk -F. '/report.active_user.30092018/ {print $(NF-1)}'

现在,我希望当前日期作为变量传递到上述命令中并获取结果:

ls /user/reports | awk -F. '/report.active_user.$(date +'%d%m%Y')/ {print $(NF-1)}'

但未获得所需的输出。

尝试过bash脚本:

#!/usr/bin/env bash

_date=`date +%d%m%Y`

 active=$(ls /user/reports | awk -F. '/report.active_user.${_date}/ {print $(NF-1)}')


 echo $active

但是输出仍然是空白的。

请帮助使用正确的语法。

2 个答案:

答案 0 :(得分:1)

正如@cyrus所说,您必须在变量分配中使用双引号,因为简单引号仅用于字符串,而不用于包含变量。

基本用例

number=10
string='I m sentence with or wihtout var $number'
echo $string

正确的用例

number=10
string_with_number="I m sentence with var $number"
echo $string_with_number

您可以使用简单的引号,但不能包含所有字符串

number=10
string_with_number='I m sentence with var '$number
echo $string_with_number

答案 1 :(得分:0)

Don't parse ls

您不需要awk:您可以使用Shell的功能进行管理

for file in report.active_user."$(date "+%d%m%Y")"*; do
    tmp=${file%.*}      # remove the extension
    number=${tmp##*.}   # remove the prefix up to and including the last dot
    echo "$number"
done

请参见https://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion