我必须编写的脚本必须找到$PATH
变量中的目录,并仅打印以i结尾的目录。
我如何考虑这样做
问题
关于如何克服这个问题的任何想法,或者你能想到更合适的事情。
答案 0 :(得分:2)
你可以使用这个BASH单线程来完成这项工作:
(IFS=':'; for i in $PATH; do [[ -d "$i" && $i =~ i$ ]] && echo "$i"; done)
IFS=':'
将输入字段分隔符设置为:
$PATH
在for loop
i
结尾,则会对其进行测试答案 1 :(得分:1)
使用bash的parameter expansion替换所有分隔符。
${parameter//pat/string}
例如,
mypaths="${PATH//:/ }"
将按目录拆分路径,因此您可以运行:
for directory in $mypaths
do
...
done
答案 2 :(得分:0)
您可以将 Inter Field Separator (IFS)更改为冒号,然后以auto_magically方式解析路径。 ; - )
IFS=:
for i in $PATH
do
echo $i | egrep -e 'i$'
done
答案 3 :(得分:-1)
grep 'i$' <<<"${PATH//:/$'\n'}"
$PATH
项被分为单独的行,方法是将:
个实例替换为parameter expansion中的换行符($'\n'
); $'\n'
是ANSI C-quoted string。
生成的字符串作为here-string传递给grep
的标准输入
(<<<...
)。
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