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;

관련 정보