排除文件的grep数组参数

dif*_*odi 4 linux bash grep

我想从我的grep命令中排除一些文件,为此我使用参数:

--exclude=excluded_file.ext
Run Code Online (Sandbox Code Playgroud)

为了更容易阅读,我想使用带有排除文件的bash数组:

EXCLUDED_FILES=("excluded_file.ext")
Run Code Online (Sandbox Code Playgroud)

然后传递$ {EXCLUDED_FILES}数组grep,如:

grep -Rni "my text" --exclude=${EXCLUDED_FILES}
Run Code Online (Sandbox Code Playgroud)

我如何将数组作为参数传递给grep命令?

che*_*ner 9

变量不作为参数传递给程序; 价值观是.变量(尤其是数组)由shell扩展为一个或多个单词,每个单词作为单独的参数传递给程序.在这种特定情况下,该--exclude选项将单个文件名作为其参数,因此您需要--exclude=foo从数组中构建多个参数.一种选择:

for f in "${EXCLUDED_FILES[@]}"; do
    opts+=( --exclude="$f" )
done
grep -Rni "my text" "${opts[@]}"
Run Code Online (Sandbox Code Playgroud)


gni*_*urf 6

我猜你在找这个:

grep -Rni "${excluded_files[@]/#/--exclude=}" "my text"
Run Code Online (Sandbox Code Playgroud)

参数扩展"${excluded_files[@]/#/--exclude=}"将扩展为数组的扩展,excluded_files每个字段都以前缀为前缀--exclude=.看:

$ excluded_files=( '*.txt' '*.stuff' )
$ printf '%s\n' "${excluded_files[@]/#/--exclude=}"
--exclude=*.txt
--exclude=*.stuff
Run Code Online (Sandbox Code Playgroud)