如何生成参数以在bash中从数组中查找命令?

gk_*_*000 1 bash

我想查找几个文件名,有时在我的输入中指定通配符。下面是我所拥有的简化。假设v数组将从文件或其他任何东西生成

#!/bin/bash
from_date=2020-05-17
to_date=2020-06-17
v=('-name "*a*"' '-o' '-name "*b*"')
find . "${v[@]}" -newermt "$from_date" ! -newermt "$to_date"
Run Code Online (Sandbox Code Playgroud)

这会产生错误: find: unknown predicate `-name "*a*"'

有什么办法可以让它发挥作用吗?

Ini*_*ian 6

这个想法是对的,但第一个参数的引用不是。当你这样做时'-name "*a*"',shell 将它保留为一个单词,从数组的角度来看“完全”很好。但是findcommand 需要一个名为-name不是 的谓词-name "*a*"

使用带引号的扩展,您可以让 shell 将单词-name "*a*"作为find它不喜欢的命令选项之一传递。将参数的引用分开,以便它们单独传递。

v=('-name' '*a*' '-o' '-name' '*b*')
Run Code Online (Sandbox Code Playgroud)