对于不是管道中第一个程序的程序是否应该扩展通配符?每个示例都对管道中的第一个程序使用通配符。
例如,以下内容不起作用:
ls|grep *.h
如果我这样做,那么它是 grep 而不是扩展通配符的 shell(?)
ls|grep -E "*.h"
有没有通配符不是第一个管道的例子?我问的原因是我正在实现一个 shell,并且可以为管道中的第一个程序使用通配符,例如,ls *.h
但我不知道它是否应该为后续管道执行此操作。
背景是我正在编写自己的外壳并且我已经实现了通配符:
$ ls *.c|grep mai
[21822]
main.c
$
答案1
一个例子:
$ echo jeff > jeff
$ echo not > not
$ echo 's/jeff/not/' | sed -i -f - *
$ cat jeff
not
有关标准 shell 应如何处理文件名/路径名扩展(通配符)的更多信息,请参阅:
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_06它说:
字段分割后,如果 set -f 未生效,则应使用模式匹配表示法中描述的算法来扩展生成的命令行中的每个字段,并由用于文件名扩展的模式中的规则限定。