Linux-linux shell参数带引号的问题

发布于 2017-02-01 15:05:08 字数 901 浏览 1343 评论 2

在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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

瑾兮 2017-07-10 08:16:36

提问1: 加了引号会使用通配符失效导致,请教高手更明细的解答
-》单引号与双引号有别:单引号(hard quote):关闭所有的meta; 双引号(soft quote):关闭大部分的meta,但是某些保留,例如$

清晨说ぺ晚安 2017-05-24 17:42:18

  以GNU bash 4.x为例:

  当双引号引用时,将忽略除 $ ` " ! 这5个外所有特殊符号的特殊含义,如需把这5个符号当做正常字符处理,使用进行转义,如$等等。

  单引号引用时,则忽略除单引号本身的任何特殊符号含义。但如需引用单引号本身时,也无法使用来转义。所以使用对特殊符号作正常字符处理,可能出现单引号的时候,还是要使用双引号。

  另外在shell中使用正则表达式时,有可能会出现双重转义。因为在正则里 ^ $ ! [ ] ( ) | + * ? 都是有其特殊含义的,比如用到符号时,就必须写成\\来进行转义。

  还有,如果在shell中调用到php,还要注意&符号的转义。

以上是我以前写过关于shell转义符号的,对你理解这些可能会有帮助。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文