来自(优秀)Unix Programming Environment的一个例子 考虑一个地址簿:
John Perkins 616-555-4444
Bill Jotto 773-222-1112
Dial-a-Clown 738-224-5823
Prince Alex 837-999-999
Pizza Hut 833-339-222
Pizza Puk 882-922-222
Pizza Buk 822-221-111
现在我正在编写一个程序来搜索这个名为的地址簿 '的 411
grep $* /file/location/411
现在运行411将产生
$> 411 John
>John Perkins 616-555-4444
现在说我想给约翰打电话并邀请他去吃披萨 (所以我正在寻找John号码和披萨号码。)
$>411 John Pizza
grep: can't open pizza
不匹配!
那么如何告诉shell接受任意空格的多个参数?
答案 0 :(得分:3)
当您使用多个参数调用grep
时,它假定第一个是模式,其他所有是要搜索的文件。您需要进行两次修改:
当您调用程序时,您需要将双字参数括在双引号字符中。这是标准的shell行为。
您的程序需要从命令行读取参数,然后将它们单独发送到grep
或构建复合表达式(arg1|arg2|arg3
)并将其传递给grep
使用-E
(扩展正则表达式)标记。
例如:
args="$1"
shift # $2 becomes $1, $3 becomes $2, and so on
while [ -n "$1" ]; do
args="$args|$1"
shift
done
grep -E "$args" /path/to/address/book
或者:
while [ -n "$1" ]; do
grep "$1" /path/to/address/book
shift
done