1. https://www.cnblogs.com/mianbaoshu/p/12069458.html

Shell 命令替换是命令的输出结果赋值给某个变量。比如,将使用ls命令查看到的某个目录中的内容保存到某个变量中,这就需要使用命令替换。

Shell 中有两种方式可以完成命令替换,一种是反引号` `,一种是$(),使用方法如下:
  variable=`commands`
  variable=$(commands)

其中,variable 是变量名,commands 是要执行的命令。commands 可以只有一个命令,也可以有多个命令,多个命令之间以分号;分隔。

脚本
结果
知识点
  1. #!/bin/bash
  2. begin_time=`date` #开始时间,使用``替换
  3. sleep 20s #休眠20秒
  4. finish_time=$(date) #结束时间,使用$()替换
  5. echo "Begin time: $begin_time"
  6. echo "Finish time: $finish_time"
运行脚本,20 秒后可以看到输出结果:
Begin time: 2019年 04月 19日 星期五 09:59:58 CST
Finish time: 2019年 04月 19日 星期五 10:00:18 CST
date 命令用来获得当前的系统时间
  1. #!/bin/bash
  2. begin_time=`date +%s` #开始时间,使用``替换
  3. sleep 20s #休眠20秒
  4. finish_time=$(date +%s) #结束时间,使用$()替换
  5. run_time=$((finish_time - begin_time)) #时间差
  6. echo "begin time: $begin_time"
  7. echo "finish time: $finish_time"
  8. echo "run time: ${run_time}s"
运行脚本,20 秒后可以看到输出结果:
begin time: 1555639864
finish time: 1555639884
run time: 20s

1.使用 date 命令的%s格式控制符可以得到当前的 UNIX 时间戳

UNIX 时间戳是指从 1970 年 1 月 1 日 00:00:00 到目前为止的秒数。

2.使用date +%s时注意date与+之间有空格,+与%s之间没有空格

3.第 5 行代码中的(( ))是 Shell 数学计算命令,和 C++、C#、Java 等编程语言不同,

在 Shell 中进行数据计算不那么方便,必须使用专门的数学计算命令

  1. #!/bin/bash
  2. LS=$(ls -l)
  3. echo '不用双引号'$LS
  4. echo '------------------------'
  5. echo '使用双引号'"$LS"

为了防止出现格式混乱的情况,建议在输出变量时加上双引号。

不用双引号总用量 4 -rw-rw-r-- 1 roaddb roaddb 14 8月 26 04:29 aaa.txt -rw-rw-r-- 1 roaddb roaddb 26 8月 20 09:05 a.sh

------------------------

使用双引号总用量 4

-rw-rw-r-- 1 roaddb roaddb   14 8月  26 04:29 aaa.txt

-rw-rw-r-- 1 roaddb roaddb   26 8月  20 09:05 a.sh

如果被替换命令的输出内容包括多行(也即有换行符),或含有多个连续的空白符

那么在输出变量时应该将变量用双引号包围,否则系统会使用默认的空白符来填充,

这会导致换行无效,以及连续的空白符被压缩成一个

再谈反引号和 $()

原则上讲,上面提到的两种变量替换的形式是等价的,可以随意使用;但是,反引号毕竟看起来像单引号,有时候会对查看代码造成困扰,而使用 $() 就相对清晰,能有效避免这种混乱。而且有些情况必须使用 $(),$() 支持嵌套,反引号不行。

$()支持嵌套,举栗

Fir_File_Lines=$(wc -l $(ls | sed -n '1p'))
echo "$Fir_File_Lines"
结果是:36 anaconda-ks.cfg

要注意的是,$() 仅在 Bash Shell 中有效,而反引号可在多种 Shell 中使用

[转帖]shell命令替换~date用法~如果被替换命令的输出内容包括多行或有多个连续的空白符,输出变量时应该将变量用双引号包围的更多相关文章

  1. 【python】字符串变量赋值时字符串可用单或双引号

    >>> name='萧峰' >>> print(name) 萧峰 >>> name="独孤求败" >>> p ...

  2. centos shell基础 alias 变量单引号 双引号 history 错误重定向 2>&1 jobs 环境变量 .bash_history source配置文件 nohup & 后台运行 cut,sort,wc ,uniq ,tee ,tr ,split, paste cat> 2.txt <<EOF 通配符 glob模式 发邮件命令mail 2015-4-8 第十二节课

    centos shell基础知识 alias  变量单引号 双引号   history 错误重定向 2>&1  jobs  环境变量 .bash_history  source配置文件 ...

  3. Unix Shell中单引号、双引号字符、反斜杠、反引号的使用[转]

    在执行shell脚本的时候,shell将会对脚本中的行进行解释,然后执行:对于一些特殊处理的句子,我们可以使用引号或者反斜线来避免shell解释执行之.如下,当在命令行中输入:echo *child. ...

  4. [转帖]""(双引号) 与''(单引号) 差在哪?

    ""(双引号) 与''(单引号) 差在哪? http://wiki.jikexueyuan.com/project/13-questions-of-shell/double-sin ...

  5. shell脚本中:单引号和双引号的区别

    单引号和双引号的区别 前面我们还留下一个疑问,定义变量时,变量的值可以由单引号' '包围,也可以由双引号" "包围,它们到底有什么区别呢?不妨以下面的代码为例来说明: #!/bin ...

  6. shell 中单引号和双引号的区别

    用以下代码来说明: #!/bin/bash url="http://c.biancheng.net" website1='C语言中文网:${url}' website2=" ...

  7. php单引号和双引号的区别与用法

    php里的单引号把内容当成纯文本,不会经过服务器翻译.而双引号则与此相反.里面的内容会经过服务器处理(process). 举个简单的例子:   $foo="data"; echo ...

  8. shell单引号与变量、双引号与变量、如何在多重引号里面取到shell变量的值?

    如何在多重引号里面取到shell变量的值? 双引号是不会屏蔽对变量和某些特殊符号的转义的,而单引号里的所有内容都会原封不动的输出,而单引号里再用单引号将变量引起来,变量就又可以正常的显示,有点像数学里 ...

  9. PHP 单引号 与双引号区别

    在PHP中,字符串的定义可以使用单引号,也可以使用双引号. PHP允许我们在双引号串中直接包含字串变量,双引号串中的变量将被解释而且替换,而单引号串中的内容总被认为是普通字符.例如: $foo = 2 ...

  10. 『学了就忘』Linux基础命令 — 19、目录操作的相关命令

    目录 1.ls命令 2.cd命令 (1)绝对路径和相对路径 (2)cd命令的简化用法 3.pwd命令 4.mkdir命令 5.rmdir命令 常用目录操作的相关命令: ls命令 cd命令 pwd命令 ...

随机推荐

  1. C# / VB.NET 获取PDF文档的数字签名信息

    文档中的数字签名具有不可否认性,可有效防伪防篡改.对文档中已有的数字签名信息,可通过一定方法获取,下面通过程序代码介绍如何来实现.程序中,使用了Spire.PDF.dll,版本:6.11.6,可自行在 ...

  2. GaussDB(DWS)查询过滤器原理与应用

    摘要:GaussDB(DWS)查询过滤器(黑名单)提供查询过滤功能,支持自动隔离反复被终止的查询,防止烂SQL再次执行. 本文分享自华为云社区<GaussDB(DWS)查询过滤器原理与应用> ...

  3. 能够让机器狗学会灭火, ModelArts3.0让AI离我们又近一步

    摘要:训练.标注成本节省90%!华为云自动化AI开发平台ModelArts 3.0发布,从训练数据到模型落地一站式打通. 今年的华为,着实遭遇了不小的困难. 尤其是供应链,包括芯片方面的打击,让华为轮 ...

  4. 互联网短平快下,DevCloud如何支撑软件开发的“转型”?

    摘要:2013年踏入互联网浪潮的张浩,在8年的软件开发中,一一经历了这三段"历史进程",感受到技术迭代更新背后的魅力. 互联网改变人们的衣食住行,也在悄然无声间为根植之上的软件行业 ...

  5. 每条你收藏的资讯背后,都离不开TA

    摘要:云原生数据库GaussDB(for Redis)不仅提升了阅客的服务效率,让个性化推荐更快更稳,还降低了存储和改造成本,为企业未来发展奠定了云化基础,助力阅客实现更高质量的资讯触达. 随着互联网 ...

  6. 解读分布式调度平台Airflow在华为云MRS中的实践

    摘要:Airflow是一个使用Python语言编写的分布式调度平台,通过DAG(Directed acyclic graph 有向无环图)来管理任务. 本文分享自华为云社区<分布式调度平台Air ...

  7. 云计算的三种模式IaaS/PaaS/SaaS/BaaS对比:SaaS架构设计分析

    SaaS--软件即服务(Software as a Service)的出现改变了传统使用软件转变为使用服务. SaaS与传统软件的最大区别是,前者按年付费租用服务,后者一次买断.这貌似只是" ...

  8. 深入了解 ReadDirectoryChangesW 并应用其监控文件目录

    简介 监视指定目录的更改,并将有关更改的信息打印到控制台,该功能的实现不仅可以在内核层,在应用层同样可以.程序中使用 ReadDirectoryChangesW 函数来监视目录中的更改,并使用 FIL ...

  9. ORM之Sequelize

    一.环境: Vue.Quasar.Electron.Postgres.Sequelize.sequelize-auto 二.安装 (1)添加Sequelize(全局安装) $npm install - ...

  10. Java 时间戳和时间相互转换 日期时间和字符串相互转换 日期时间相减差值 日期时间增加指定天数

    Java 时间戳和时间相互转换 日期时间和字符串相互转换 日期时间相减差值 日期时间增加指定天数 代码: package com.sux.demo; import java.text.ParseExc ...