Linux-linux shell参数带引号的问题
在shell命令中参数可加引号也可不加
参数简单的情况加与不加没什么区别
例如:
ls /etc/passwd
ls '/etc/passwd'
效果一样,
参数复杂一点,使用引号可以合并参数
printf "waht's wrong man?n"
printf what is wrong man?n
.....以上都不是重点.....
1: ls /etc/sysconfig/network-scripts/ifcfg-eth[0-9]
2: ls '/etc/sysconfig/network-scripts/ifcfg-eth[0-9]'
1可以正常显示,2则提示没有文件或该目录,
提问1: 加了引号会使用通配符失效导致,请教高手更明细的解答
提问2: 今天在使用cpio命令引起了这样一个问题:
ls /etc/sysconfig/network-scripts/ifcfg-eth[0-9]|cpio -c -o
可以正常工作,
ls '/etc/sysconfig/network-scripts/ifcfg-eth[0-9]'|cpio -c -o
加了引号则不可以。
是的,你说的没错,不加引号就是了。但如果是这样:
cpio的输入不是ls得到,而是通过cat从一个文件读取的怎么办,怎么办?貌似不能使用通配符了
cat /tmp/a |cpio -c -o
/tmp/a下只能是这些简单的例如:
/etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network-scripts/ifcfg-eth1
如果包含通配符则不能
/etc/sysconfig/network-scripts/ifcfg-eth[0-9]
求指教。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
提问1: 加了引号会使用通配符失效导致,请教高手更明细的解答
-》单引号与双引号有别:单引号(hard quote):关闭所有的meta; 双引号(soft quote):关闭大部分的meta,但是某些保留,例如$
以GNU bash 4.x为例:
当双引号引用时,将忽略除 $ ` " ! 这5个外所有特殊符号的特殊含义,如需把这5个符号当做正常字符处理,使用进行转义,如$等等。
单引号引用时,则忽略除单引号本身的任何特殊符号含义。但如需引用单引号本身时,也无法使用来转义。所以使用对特殊符号作正常字符处理,可能出现单引号的时候,还是要使用双引号。
另外在shell中使用正则表达式时,有可能会出现双重转义。因为在正则里 ^ $ ! [ ] ( ) | + * ? 都是有其特殊含义的,比如用到符号时,就必须写成\\来进行转义。
还有,如果在shell中调用到php,还要注意&符号的转义。
以上是我以前写过关于shell转义符号的,对你理解这些可能会有帮助。