我正在嘗試對list.txt.
串列.txt:
$HOME/a.txt
$HOME/b.txt
$HOME/c.txt
當我使用
grep -i 'word' $(cat list.txt)
它沒有意識到$HOME。但是以下命令有效!
grep 'word' $HOME/a.txt
uj5u.com熱心網友回復:
你需要一點魔法envsubst:
$ grep word $(cat list.txt | envsubst)
...
uj5u.com熱心網友回復:
- 用于
envsubst替換$HOME為實際的目錄名(假設不包含空格) - 在將 envsubst 的標準輸出上的檔案名串列拆分為傳遞給的命令列引數時,用于
xargs尊重引號和反斜杠(因此仍然可以表示帶有空格的檔案名)grep
envsubst <file.txt | xargs grep -e word
uj5u.com熱心網友回復:
這看起來像 bash 和 ksh 問題,所以我會相應地回答。
發生的事情是 $HOME 由 shell 解釋,而不是 grep。您需要在將 $HOME 傳遞給 grep 之前對其進行解釋。eval 關鍵字可以通過以下方式為您執行此操作:
for file in $(cat test.txt )
do
eval "grep 'word' $file"
done
如果您直接使用 cat,則生成的字串包含換行符。為避免這種情況,我將檔案放入一個陣列并在其中使用該陣列(< 可以用來代替 cat)。這也有效:
typeset -a test=( $( < test.txt ) )
eval "grep word ${test[@]}"
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/439456.html
上一篇:床具安裝問題
下一篇:Bash-同時從檔案描述符中讀取
