Shell-Script

grep 的結果不能儲存在變數中

  • August 21, 2018

我想從文件名中獲取日期。這可以使用以下程式碼:

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 個空行。我在那裡想念什麼?

你放棄了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;

您在命令執行擴展中失去並回顯,但最好使用 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;

引用自:https://unix.stackexchange.com/questions/421399