[linux] bash中的单引号(‘)和双引号(“)

在命令行中,单引号(')和双引号(")在某些情况下会有不同的效果,尤其是在涉及bash变量和特殊字符的解析时。在你给出的两个命令中:

ps -ef|grep "tokenize"|grep -v grep|awk '{print $2}'

ps -ef|grep "tokenize"|grep -v grep|awk "{print $2}"

差异来自于单引号和双引号对于$2的处理:

  • 当使用单引号{print $2}时,$2是被当作字符串的一部分,表示awk应当打印出当前行的第二个字段。单引号会阻止shell对其进行变量展开,因此$2这个表达式被完整地传递给了awk。

  • 当使用双引号"{print $2}"时,双引号不会阻止shell变量替换。如果在执行这段命令的环境中,shell中恰好有一个名叫$2的变量(比如在一个脚本中作为位置参数传入),shell会先尝试将$2替换为对应的变量的值,然后才会执行awk。如果$2变量不存在,它将被替换为空字符串,这可能会导致awk命令行为不正常或者输出不正确。

在大多数的Unix-like系统中,使用单引号可以保证命令按照预期的方式运行,因为它将预防shell在传递给awk之前对内容进行任何处理。所以第一个命令'{print $2}'更可靠,因为它会正确地被处理为awk命令打印每行的第二列。

如果两个命令给出了不同的输出,那可能是因为$2在当前shell环境中已经有了一个值,而这个值在使用双引号的情况下被插入到了awk命令中。通常在执行这些命令时,为了确保可靠性,建议使用单引号。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心心喵

喵喵(*^▽^*)

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值