将 ls 和 awk 目录内容放入 shell 变量中的方法

将 ls 和 awk 目录内容放入 shell 变量中的方法

我正在努力寻找某种方式来以其他方式表达这一点,以产生适当的输出:

var="$(ls /var/run/ | grep searchterm | awk {'NR == 2'})"

我曾在诸如 shellcheck 之类的地方看到过使用 glob 或循环,但我迄今为止的研究还没有想出任何方法可以做到这一点,以便我可以将结果作为变量来获取,而不仅仅是回显或打印内容。

有什么方法可以做到这一点?

答案1

var="$( find /var/run -iregex "$YOUR_REGEX" 2> /dev/null )"

当然,man find要了解-iregex选项的一些局限性。

如果搜索词不太复杂,您可以使用-iname "*$SEARCHTERM*"

一般来说,解析输出ls是您真正应该避免的事情。

答案2

如果你的情况

目录中有四个文件 — 其中三个有静态名称(例如,redbluegreen,一个没有。但我知道第四个foo文件的名称中会有 。我想获取第四个文件名。显然,我可以安全地搜索foo,因为没有一个静态名称包含foo

那么你需要做的就是

var="$(echo /var/run/*foo*)"

如果你只是在当前目录中工作,并且你确实

var="$(echo *foo*)"

第四个文件名可能以-(破折号),上述命令可能会失败。(此外,如果文件名可能包含(反斜杠),上述任一命令都可能失败\。)但是

var="$(printf '%s' *foo*)"

或者

var="$(printf '%s' /var/run/*foo*)"

应该管用。

当然,如果第四个文件名以.(点),你还有另一个问题。

相关内容