grep的结果无法存储在变量中

grep的结果无法存储在变量中

我想从文件名中获取日期。使用以下代码可以实现此功能:

for filename in OH/*
do
    echo $filename |grep -Eo '[[:digit:]]{14}'
done;

现在我想将结果保存到这样的变量中:

for filename in OH/*
do
    result=$($filename |grep -Eo '[[:digit:]]{14}')
    echo $result
done;

但我打印了 2 个空行。我在那里缺少什么?

答案1

你放弃了echo

for filename in OH/*
do
    result=$(echo $filename | grep -Eo '[[:digit:]]{14}')
    echo "$result"
done;

或者更好的是,

for filename in OH/*
do
    result=$(printf %s "$filename" |grep -Eo '[[:digit:]]{14}')
    echo "$result"
done;

或者

for filename in OH/*
do
    result=$(grep -Eo '[[:digit:]]{14}' <<<"$filename")
    echo "$result"
done;

答案2

您在命令执行扩展中缺少和 echo,但最好使用 printf:

result=$(echo "$filename" | grep -Eo '[[:digit:]]{14}')

result=$(printf '%s' "$filename" | grep -Eo '[[:digit:]]{14}')

当然,如果文件与 grep 正则表达式不匹配,结果有可能为 NULL,为此我们需要测试:

#!/bin/bash 
for filename in OH/*
do
    result=$(printf '%s' "$filename" | grep -Eo '[[:digit:]]{14}')
    [ "$result" ] && echo "$result"
done;

相关内容