Shell替换:转义字符、变量替换,命令替换

以下内容源于C语言中文网的学习与整理,非原创,如有侵权请告知删除。

一、转义字符

如果表达式中包含特殊字符,Shell 将会进行替换。除了在双引号中使用变量会进行替换,转义字符也是一种替换。

举个例子:

#!/bin/basha=10
echo -e "Value of a is $a \n"
Value of a is 10

这里 -e 表示对转义字符进行替换。如果不使用 -e 选项,将会原样输出:

Value of a is 10\n

下面的转义字符都可以用在 echo 中。

转义字符含义
\\反斜杠
\a警报,响铃
\b退格(删除键)
\f换页(FF),将当前位置移到下页开头
\n换行
\r回车
\t水平制表符(tab键) 
\v垂直制表符

可以使用 echo 命令的 -E 选项禁止转义,默认也是不转义的;使用 -n 选项可以禁止插入换行符。

 

二、变量替换

变量替换,指的是可以根据这个变量的状态(是否为空、是否定义等)来改变它的值。

可以使用的变量替换形式:

形式说明
${var}变量本来的值
${var:-word}如果变量 var 为空或已被删除(unset),那么返回 word,但不改变 var 的值。
${var:=word}如果变量 var 为空或已被删除(unset),那么返回 word,并将 var 的值设置为 word。
${var:?message}如果变量 var 为空或已被删除(unset),那么将消息 message 送到标准错误输出,可以用来检测变量 var 是否可以被正常赋值。
若此替换出现在Shell脚本中,那么脚本将停止运行。
${var:+word}如果变量 var 被定义,那么返回 word,但不改变 var 的值。

例子说明:

#!/bin/bashecho ${var:-"Variable is not set"}
echo "1 - Value of var is ${var}"echo ${var:="Variable is not set"}
echo "2 - Value of var is ${var}"unset var
echo ${var:+"This is default value"}
echo "3 - Value of var is $var"var="Prefix"
echo ${var:+"This is default value"}
echo "4 - Value of var is $var"echo ${var:?"Print this message"}
echo "5 - Value of var is ${var}"
Variable is not set
1 - Value of var is #1
Variable is not set
2 - Value of var is Variable is not set #23 - Value of var is                #3
This is default value
4 - Value of var is Prefix   #4
Prefix
5 - Value of var is Prefix    #5

三、命令替换

命令替换,是指Shell可以先执行命令,并把输出结果暂时保存在某变量,在适当的地方输出。

这个在Shell变量与Shell特殊变量_天糊土的博客-CSDN博客中的“一.5、将命令的结果赋值给变量”小节有提及。

命令替换的语法:

`command`

注意是反引号,不是单引号,这个键位于 Esc 键下方。

下面的例子中,将命令执行结果保存在变量中。

#!/bin/bashDATE=`date`
echo "Date is $DATE"USERS=`who | wc -l`
echo "Logged in user are $USERS"UP=`date ; uptime`
echo "Uptime is $UP"
xjh@ubuntu:~/iot/tmp$ ./test.sh 
Date is 星期日 七月  3 17:45:29 CST 2022
Logged in user are 3
Uptime is 星期日 七月  3 17:45:29 CST 202217:45:29 up  4:25,  3 users,  load average: 0.08, 0.05, 0.05
xjh@ubuntu:~/iot/tmp$ 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460753.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于过去的这一个月——面试经历

终于到了周末,感觉很久很久没有去闲下来了!9月过半,我还在Symantec做实习生,做点单位的工作,研究点自己喜欢的事情,小日子过得还是蛮舒服的。中秋节提前买好了去女朋友家的动车票,规划着去这里那…

python读取postgresql数据库并发送相关提醒邮件

代码如下:#!/usr/bin/env pythonimport smtplibfrom email.mime.text import MIMETextimport psycopg2import datetimefrom time import *mail_host "smtp.XXX.com" mail_user "XXX" mail_pass "XXX" mail_postfix&…

Shell运算符:算术运算符、关系运算符、布尔运算符等

以下内容源于C语言中文网的学习与整理,非原创,如有侵权请告知删除。 expr表达式计算工具 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,其中 expr 最常用。 expr 是一款表达式计算工具&…

AjaxControlToolkit的使用

摘自&#xff1a;http://www.cnblogs.com/zm235/archive/2008/05/09/1189558.html 暂时的做法&#xff1a; 把AjaxControlToolkit.dll复制到项目的bin目录里面,然后配置Web.config文件&#xff0c;例如&#xff1a; <configuration><system.web><pages><c…

Shell的注释

关于注释&#xff0c;了解三点内容。 &#xff08;1&#xff09;Shell脚本中&#xff0c;以“#”开头的行就是注释&#xff0c;会被解释器忽略。 &#xff08;2&#xff09;sh里没有多行注释&#xff0c;只能每一行加一个#号。 &#xff08;3&#xff09;遇到大段的代码需要…

linq中let关键字学习

linq中let关键字就是对子查询的一个别名&#xff0c;let子句用于在查询中添加一个新的局部变量&#xff0c;使其在后面的查询中可见。 linq中let关键字实例 1、传统下的子查询与LET关键字的区别 C# 代码 复制static void Main(string[] args) { int[] numbers new[] { 1, 2,…

分析与设计

分析与测试&#xff1a;代码质量&#xff0c;面向对象&#xff0c;测试&#xff0c;业务分析转载于:https://www.cnblogs.com/sofia/p/3381931.html

Shell中的字符串

字符串是shell编程中最常用最有用的数据类型&#xff08;除了数字和字符串&#xff0c;也没啥其它类型好用了&#xff09;&#xff0c;字符串可以用单引号&#xff0c;也可以用双引号&#xff0c;也可以不用引号。 单引号 strthis is a string 单引号字符串的限制&#xff1…

苹果

苹果 描述 ctest有n个苹果&#xff0c;要将它放入容量为v的背包。给出第i个苹果的大小和价钱&#xff0c;求出能放入背包的苹果的总价钱最大值。 输入有多组测试数据&#xff0c;每组测试数据第一行为2个正整数&#xff0c;分别代表苹果的个数n和背包的容量v&#xff0c;n、v同…

c# Ftp下载程序源代码解析

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.IO;using System.Net;using System.Threading.Tasks;using System.Windows.Forms;namespace 网络操作…

Shell输入输出重定向

Unix 命令默认从标准输入设备(stdin)获取输入&#xff0c;将结果输出到标准输出设备(stdout)显示。一般情况下&#xff0c;标准输入设备就是键盘&#xff0c;标准输出设备就是终端&#xff0c;即显示器。 一、输出重定向 命令的输出不仅可以是显示器&#xff0c;还可以是其他文…

一个基于POP3协议进行邮箱账号验证的类

最近老陈要针对企业邮箱做一些开发&#xff0c;以对接企业OA神马的&#xff0c;但企业邮箱唯独没有开放账号密码验证功能&#xff0c;很恼火&#xff01;不得已&#xff0c;翻出早些年的Asp代码改编成了C#类&#xff0c;实现了一个C#下的通过POP3协议进行邮箱账号验证的类&…

cobbler get-loaders 通过代理下载

2019独角兽企业重金招聘Python工程师标准>>> cobbler 版本是2.6.3&#xff0c;可以通过系统环境变量设置proxy&#xff0c;支持 HTTP_PROXY、HTTPS_PROXY、FTP_PROXY 三个变量。 cobbler 版本是2.6.6时&#xff0c;需要从/etc/cobbler/settings 中增加proxy_url_ex…

Shell文件包含

像其他语言一样&#xff0c;Shell 也可以包含外部脚本&#xff0c;将外部脚本的内容合并到当前脚本。 Shell 中包含脚本可以使用&#xff1a; . filename 或者 source filename 两种方式的效果相同。简单起见&#xff0c;一般使用点号(.)&#xff0c;但是注意点号(.)和文件…

Vim高级使用 - CentOS下使用VIM打造C/C++开发环境

使用TagList http://blog.csdn.net/fbfsber008/article/details/7044723 转载于:https://www.cnblogs.com/tiantao/p/2389126.html

Shell数组:shell数组的定义、数组长度

bash支持一维数组&#xff08;不支持多维数组&#xff09;&#xff0c;并且没有限定数组的大小。类似与C语言&#xff0c;数组元素的下标由0开始编号。获取数组中的元素要利用下标&#xff0c;下标可以是整数或算术表达式&#xff0c;其值应大于或等于0。 定义数组 在Shell中…

分析busybox的源码

以下内容源于网络资源的学习与整理&#xff0c;如有侵权请告知删除。 参考博客 busybox详解_linuxarmsummary的博客-CSDN博客 一、前言 因为uboot给内核传参的bootargs中有“init/linuxrc”这个项目&#xff0c;而由前面的分析可知/linuxrc这个二进制文件位于根文件系统中&…

Vmware vSphere 十个疑难问题解决方法

Vmware vSphere疑难问题解决方法导读&#xff1a;这里汇总了10个Vmware vSphere常见的问题&#xff1a;清除vSphere Client的登录记录、Linux系统VMXNET3虚拟网路卡时UDP包被Drop掉等&#xff0c;并给出了具体的解决办法。关键词&#xff1a;VMware vSphere1、清除vSphere Clie…

PHP中开发的良好习惯总结(持续更新) By ACReaper

最近在自己用php在写一个商城&#xff0c;再这个工程中学习到了很多的开发经验。 1.为了更好的调试和开发php&#xff0c;在开发状态中到php.ini设置开发的错误报告 在ubuntu中&#xff0c;其在/etc/php5/apache2/php.ini中。用命令打开后&#xff0c;找到 error_reporting E_…

Makefile中常用的函数

以下内容源于C语言中文网的学习与整理&#xff0c;非原创&#xff0c;如有侵权请告知删除。 一、Makefile中的函数格式 函数的调用和变量的调用很像。引用变量的格式为$(变量名)&#xff0c;而函数调用的格式如下&#xff1a; $(<function> <arguments>) 或者是…