Bash 脚本:`(反引号)运算符和 $()的使用方式

Crq
Crq
Crq
324
文章
0
评论
2021年8月6日13:51:05
评论
525 1556字阅读5分11秒
摘要

` 反引号操作符可以在 shell 脚本中使用,因为它很容易与其他命令结合使用。但是,还有一种更“推荐”的方式来做同样的事情,使用$()运算符。本文将介绍在 shell 脚本中使用他们的优缺点。

反引号的使用方式

下面是一个简单的实例:

[root@localhost ~]# echo "There are `ls | wc -l` files in this directory"
There are 10 files in this directory

Bash 脚本:`(反引号)运算符和 $()的使用方式
ls |wc -l 用于列出和计算当前目录的文件数,然后将它嵌入到 echo 命令中。

在 shell 脚本中,当然可以执行相同的操作,将ls | wc -l命令的结果分配给一个变量,稍后使用该变量。

[root@localhost ~]# file_count=`ls | wc -l`
[root@localhost ~]# echo "There are $file_count files in this directory"
There are 10 files in this directory

$()的使用方式

也可以通过使用$()代替`反引号来获得相同的结果,如下例所示:

[root@localhost ~]# echo "There are $(ls | wc -l) files in this directory"
There are 10 files in this directory

Bash 脚本:`(反引号)运算符和 $()的使用方式
下面是一个例子,我需要对网络连接中的某些问题进行故障排除,因此我决定每分钟显示总连接数和等待连接数。

[root@localhost ~]# vim netinfo.sh
#!/bin/bash
while true
do
ss -an > netinfo.txt
connections_total=$(cat netinfo.txt | wc -l)
connections_waiting=$(grep WAIT netinfo.txt | wc -l)
printf "$(date +%R) - Total=%6d Waiting=%6d\n" $connections_total $connections_waiting
sleep 60
done

Bash 脚本:`(反引号)运算符和 $()的使用方式
运行一下脚本:

[root@localhost ~]# ./netinfo.sh
17:13 - Total=   158 Waiting=     4
17:14 - Total=   162 Waiting=     0
17:15 - Total=   155 Waiting=     0
17:16 - Total=   155 Waiting=     0
17:17 - Total=   155 Waiting=     0

如何选择使用哪种方式

这里更推荐使用$()方式。下面是原因:
1. 如果内部命令也使用``运算符可能会变得混乱。

  • 将需要转义内部的`,如果将单引号作为命令的一部分或结果的一部分,阅读和排除脚本故障可能会变得困难。
  • 如果开始考虑在其他`运算符中嵌套`运算符,则事情将不会按预期工作或根本不起作用。

2. $()操作符更安全,更可预测。

$() 运算符中的内容被视为 shell 脚本。从语法上讲,这和把代码保存在文本文件中是一样的。

以下是`$()行为差异的一些示例:

[root@localhost ~]# echo '\$x'
\$x
[root@localhost ~]# echo `echo '\$x'`
$x
[root@localhost ~]# echo $(echo '\$x')
\$x

总结

在较为复杂的命令语句中,推荐使用$()方式。

本文原创地址:https://www.linuxprobe.com/bash-backtick-usage.html编辑:逄增宝,审核员:逄增宝

weinxin
我的微信
这是我的微信扫一扫
Crq
  • 本文由 发表于 2021年8月6日13:51:05
  • 转载请注明:https://www.cncrq.com/9997.html
Linux下如何实现与Internet时间同步 Linux教程

Linux下如何实现与Internet时间同步

关于时区的概念,其实初中地理课已经涉及,很多人都多少了解一些,可能只是细节搞不太清楚。为什么会将地球分为不同时区呢?因为地球总是自西向东自转,东边总比西边先看到太阳,东边的时间也总...
老炮儿教你在 Debian Linux上配置网桥 Linux教程

老炮儿教你在 Debian Linux上配置网桥

如何你想为你的虚拟机分配 IP 地址并使其可从你的局域网访问,则需要设置网络桥接器。默认情况下,虚拟机使用 KVM 创建的专用网桥。但你需要手动设置接口,避免与网络管理员发生冲突。
linux下安装python3.5.3的方式 Linux教程

linux下安装python3.5.3的方式

Python是一种面向对象的解释型计算机程序设计语言。Python具有丰富和强大的库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。那...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: