Shell命令中关于引号的一个问题

有一个phonb文件,内容如下:BarbaraSwingle201-555-9257LizStachiw212-555-2298SusanGoldberg201-555-... 有一个phonb文件,内容如下:
Barbara Swingle 201-555-9257
Liz Stachiw 212-555-2298
Susan Goldberg 201-555-7776
Susan Topple 212-555-4932
Tony Iannino 973-555-1295

写一个针对该文件的文字查找脚本find.sh,内容如下:
grep "$1" phonb

然后命令行下运行(1)./find.sh 'Susan T'(2)./find.sh Tony 这两条命令都是正确的。
但是当我把"$1"改成'$1'后执行上面(1)(2)两条命令都是错误的。
而写成$1时。(1)是错误的,(2)是正确的。

请高手给出解释,答案让我满意的另送50分。
那为什么写成grep $1 phonb时(2)是对的,(1)是错的?
三楼的朋友,你的说法不错,但是为什么grep 'Susan T' phonb是对的;而grep $1 phonb,$1用'Susan T'代替就像你说的变成grep Susan T phone 而不是grep 'Susan T'呢?
展开
 我来答
宏宇资深工程师
2009-01-17 · TA获得超过775个赞
知道小有建树答主
回答量:327
采纳率:0%
帮助的人:0
展开全部
出现这样的问题,原因是你在平时使用shell使用时的不规范所导致的。
grep命令所面所跟的是字符串,而且单引号(')是将所有的其中的内容都转达化为字符,如果是双引号的话(""),除了转意字符之外,其他的字符保持原意。也就是说:
grep "$1" filename 这里是$1是你的第一个参数;
grep '$1' filename 这里就单纯的只是"$1"这个字符串了,而并不是你所指定的参数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友32cdd9945
2009-01-19 · TA获得超过1374个赞
知道大有可为答主
回答量:2429
采纳率:100%
帮助的人:1945万
展开全部
楼上的解释都是对的,呵呵

如果你写grep $1 phonb 展开后就是
grep Susan T phonb
这样就像传了3个参数给grep程序一样了, 所以报错啦。

grep "$1" phonb 这样写是传了两个参数而已,参数有空格的都要用引号引起来了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
阳光上的桥
2009-01-16 · 知道合伙人软件行家
阳光上的桥
知道合伙人软件行家
采纳数:21423 获赞数:65818
网盘是个好东东,可以对话和传文件

向TA提问 私信TA
展开全部
是这样的,shell和perl、PHP一样,只有双引号里面的$1才解释为变量,单引号里面的$1就是$和1两个字符,不进行变量识别的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
慧质欣蘭
2009-02-01 · TA获得超过747个赞
知道小有建树答主
回答量:250
采纳率:0%
帮助的人:0
展开全部
这么想吧,实际上当grep "$1" phonb,$1用'Susan T' 代替的时候也并非grep“ 'Susan T'” phonb 而是grep“Susan T” phonb。'Susan T'在这里只是一种表示,并非指代的实际内容。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式