파일 이름에서 날짜를 얻고 싶습니다. 이 기능은 다음 코드를 사용하여 구현할 수 있습니다.
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;