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'呢? 展开
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'呢? 展开
4个回答
展开全部
出现这样的问题,原因是你在平时使用shell使用时的不规范所导致的。
grep命令所面所跟的是字符串,而且单引号(')是将所有的其中的内容都转达化为字符,如果是双引号的话(""),除了转意字符之外,其他的字符保持原意。也就是说:
grep "$1" filename 这里是$1是你的第一个参数;
grep '$1' filename 这里就单纯的只是"$1"这个字符串了,而并不是你所指定的参数。
grep命令所面所跟的是字符串,而且单引号(')是将所有的其中的内容都转达化为字符,如果是双引号的话(""),除了转意字符之外,其他的字符保持原意。也就是说:
grep "$1" filename 这里是$1是你的第一个参数;
grep '$1' filename 这里就单纯的只是"$1"这个字符串了,而并不是你所指定的参数。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼上的解释都是对的,呵呵
如果你写grep $1 phonb 展开后就是
grep Susan T phonb
这样就像传了3个参数给grep程序一样了, 所以报错啦。
grep "$1" phonb 这样写是传了两个参数而已,参数有空格的都要用引号引起来了
如果你写grep $1 phonb 展开后就是
grep Susan T phonb
这样就像传了3个参数给grep程序一样了, 所以报错啦。
grep "$1" phonb 这样写是传了两个参数而已,参数有空格的都要用引号引起来了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是这样的,shell和perl、PHP一样,只有双引号里面的$1才解释为变量,单引号里面的$1就是$和1两个字符,不进行变量识别的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这么想吧,实际上当grep "$1" phonb,$1用'Susan T' 代替的时候也并非grep“ 'Susan T'” phonb 而是grep“Susan T” phonb。'Susan T'在这里只是一种表示,并非指代的实际内容。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询