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

コマンド実行拡張に欠落とエコーがありますが、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;

関連情報