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

反引号的使用方式

下面是一个简单的实例:

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


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


下面是一个例子,我需要对网络连接中的某些问题进行故障排除,因此我决定每分钟显示总连接数和等待连接数。

[root@localhost ~]# vim netinfo.sh#!/bin/bash
while true
doss -an > netinfo.txtconnections_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_waitingsleep 60
done


运行一下脚本:

[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

总结

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

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

  1. 【Linux】Shell(Bash)单引号、双引号、不加引号和反引号用法和区别详解

    简要总结 不加引号:不会将含有空格的字符串视为一个整体输出, 如果内容中有变量等,会先把变量解析出结果,然后在输出最终内容来,如果字符串中带有空格等特殊字符,则不能完整的输出,需要改加双引号,一般连续 ...

  2. Shell脚本,环境变量,位置变量,预定义变量,自定义变量,单引号双引号反引号用法,一般变量和交互式变量read定义,密文输入变量信息

    Shell脚本,变量,系统预设的环境变量,位置变量,预定义变量,用户的自定义变量 一.定义变量 1.以固定的名称存放可以变化的值 2.格式为 变量名=变量值 3.取消变量的格式 unset 变量名 4 ...

  3. Shell脚本之反引号【``】和 $()

    一.奇怪的返回 今天在搞监控的时候,修改一个老脚本,主要是通过对操作系统进行判断来获取不同的监控参数.(获取top参数在不同操作系统上也有个坑,会在另外一篇里面写) 脚本如下,非常简单: #处理Cen ...

  4. linux bash shell中,单引号、 双引号,反引号(``)的区别及各种括号的区别

    一.单引号和双引号 首先,单引号和双引号,都是为了解决中间有空格的问题. 因为空格在linux中时作为一个很典型的分隔符,比如string1=this is astring,这样执行就会报错.为了避免 ...

  5. shell 脚本中双引号、单引号、反引号的区别,其他命令

    如果make执行的命令前面加了@字符,则不显示命令本身而只显示它的结果; Android中会定义某个变量等于@,例如 hide:= @ 通常make执行的命令如果出错(该命令的退出状态非0)就立刻终止 ...

  6. Shell脚本中 双引号(“”)单引号(‘’)反引号(``)的区别

    1.由单引号括起来的字符都作为普通字符出现.特殊字符用单引号括起来以后,也会失去原有意义,而只作为普通字符解释. 2.由双引号括起来的字符,除$(美元符号).\(反斜杠).'(单引号).和" ...

  7. expect脚本中使用普通用户执行sh脚本命令,expect脚本中解决``反引号获取值有问题方法、expect遍历登录不同主机不同密码的主机执行指定命令方法

    文章目录 说明 代码 脚本内容 存放ip和其密码 执行脚本 测试[必做] 批量跑脚本 后台验证 说明 今天有一个脚本需求[目前有400台虚拟机,手动登录肯定不现实的],5期所有虚拟机都需要验证是否已经 ...

  8. Shel脚本学习—反引号、单引号、双引号区别与联系

    反引号 反引号位 (`) 位于键盘的Tab键的上方.1键的左方.注意与单引号(')位于Enter键的左方的区别. 在Linux中起着命令替换的作用.命令替换是指shell能够将一个命令的标准输出插在一 ...

  9. Shell脚本 单引号、双引号和反引号的区别

    定义一个变量时,等号两边不能有空格,若有空格可用双引号或单引号将变量内容结合. (1)双引号内的特殊字符可保有原本的特性 var="lang is $LANG" echo $var ...

最新文章

  1. 查看matlab中函数源代码的方法
  2. Ubuntu 18.04缺少libgconf-2.so.4
  3. 2015!我来了,你在哪里?今年第一篇
  4. windows下安装TensorFlow(清华镜像)
  5. 如何使用 Laravel Collections 类编写神级代码
  6. c++使用Vigenere加解密文本的算法(附完整源码)
  7. Android 开源框架 ( 二 ) 基于OkHttp进一步封装的okhttp-utils介绍
  8. 算法第五章上机实践报告
  9. libcurl 遇到的问题
  10. 剑指Offer面试题:1.实现单例模式
  11. mysql内容_mysql 的基本内容
  12. DosBox装Windows98
  13. 主要空间数据挖掘方法
  14. 一篇文章带你彻底了解Kubernetes
  15. 【GlobalMapper精品教程】010:EPSG简介、通过EPSG坐标转换应用实例
  16. 2018计算机cpu调研,2018最新电脑处理器天梯图,进来了解下
  17. 精细化运营探索:基于响应模型场景化应用
  18. play 项目 入到Idea
  19. vue实现微信网页授权登录
  20. 与《新走遍美国》的邂逅

热门文章

  1. 清华「计图」、旷视「天元」纷纷重磅开源,国产深度学习框架迎来高光时刻...
  2. 机器学习常用损失函数小结
  3. BAT常爱问的面试智力题,你能答对几道?
  4. djangorestframework源码分析2:serializer序列化数据的执行流程
  5. 无人驾驶 | 为什么双目自动驾驶系统难以普及?
  6. 【OpenCV 4开发详解】图像透视变换
  7. 【OpenCV 4开发详解】图像与视频的保存
  8. 基础知识——操作列表(三)
  9. 如何解构单体前端应用——前端应用的微服务式拆分
  10. visualVM 安装使用