我必须写的脚本必须从$PATH
variables中find目录,并只打印以i结尾的目录。
我怎么想这样做
问题
关于如何解决这个问题的任何想法,或者你能想出更合适的事情。
你可以使用这个BASH单行来完成这个工作:
(IFS=':'; for i in $PATH; do [[ -d "$i" && $i =~ i$ ]] && echo "$i"; done)
IFS=':'
将输入字段分隔符设置为:
$PATH
在for loop
迭代 i
使用BASH正则表达式 使用bash的参数扩展来替换所有的分隔符。
${parameter//pat/string}
例如,
mypaths="${PATH//:/ }"
将按目录拆分路径,那么你可以运行:
for directory in $mypaths do ... done
您可以将Inter Field Separator (IFS)更改为冒号,然后将路径从auto_magically解开。 😉
IFS=: for i in $PATH do echo $i | egrep -e 'i$' done
尽管倒票,我相信这是一个有效的,简洁的解决方案。 请告诉我们,如果你不同意,也许如何改善答案。
grep 'i$' <<<"${PATH//:/$'\n'}"
$PATH
条目通过在参数扩展中用换行符( $'\n'
)替换:
实例分成单独的行; $'\n'
是ANSI C引号的字符串 。
得到的字符串作为here-string ( <<<...
)传递给grep
的stdin。
然后使用grep
来匹配那些以( $
)字母i
结尾的行。
为了不区分大小写,请使用grep -i 'i$'
。
示范:
$ (PATH='/ends/in_i:/usr/bin:/also/ends_in_i'; grep 'i$' <<<"${PATH//:/$'\n'}") /ends/in_i /also/ends_in_i