Shell-Script
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 個空行。我在那裡想念什麼?
你放棄了
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;