我想从文件名中获取日期。使用以下代码可以实现此功能:
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;