首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

bash shell参数展开(Shell Parameter Expansion):替换变量(variable)中字符串

在写bash shell脚本时,如果遇到要替换变量中字符串,首先想到就是用sed命令,比如下面的示例将变量str中数字123替换成UUU: $ str=hello,word,123 $ echo...$str | sed -E -e 's/[0-9]/U/g' hello,word,UUUU 上面的例子中用到echo,sed两个命令来实现字符串替换,略显麻烦 其实bash提供了更简单语法来实现上面的功能...匹配模板(类似正则表达式),据此查找要匹配字符串 string 对满足pattern匹配条件字符串进行替换字符串 pattern 格式参见 《Pattern-Matching》 https...=hello,word,123 $ echo ${str//[0-9]/U} hello,word,UUU ## 如果只是要替换第一个出现数字这样写 $ echo ${str//[0-9]/U} #...# 如果只是要替换最后一个出现数字这样写 hello,word,U23 $ echo ${str/%[0-9]/U} hello,word,12U 以上雕虫小技都来自于GNU bash shell手册

3.8K20
您找到你想要的搜索结果了吗?
是的
没有找到

【一通百通】Bash单双括号建议:多用], 少用[]

str1 在字符串str2 之后 3.常见数值测试 int1 -eq int2 如果int1 等于int2,返回真 int1 -ne int2 如果int1 不等于int2,返回真 int1 -lt...int2 如果int1 小于int2,返回真 int1 -le int2 如果int1 小于等于int2,返回真 int1 -gt int2 如果int1 大于int2,返回真 int1 -ge...在[[和]]之间所有的字符都不会发生文件名扩展或者单词分割,但是会发生参数扩展和命令替换。 ②支持字符串模式匹配,使用=~操作符时甚至支持shell正则表达式。...比如,&&、||、 操作符能够正常存在于[[ ]]条件判断结构中,但是如果出现在[ ]结构中的话,会报错。 ④bash把双中括号中表达式看作一个单独元素,并返回一个退出状态码。...比如,&&, ||, 操作符能够正常存在于[[]]条件判断结构中, 但是如果出现在[ ]结构中的话, 会报错。

54820

2023-05-15:对于某些非负整数 k ,如果交换 s1 中两个字母位置恰好 k 次, 能够使结果字符串等于 s2 ,认为字符串 s1 和 s2

2023-05-15:对于某些非负整数 k ,如果交换 s1 中两个字母位置恰好 k 次,能够使结果字符串等于 s2 ,认为字符串 s1 和 s2 相似度为 k。...如果 cur 与 s2 相等,返回当前代价 cost。否则,找到 cur 与 s2 第一个不同位置 firstDiff,再枚举 firstDiff 之后位置 i。...如果 curi 与 s2firstDiff 相等但不在第 i 个位置,构造一个新字符串 newStr,交换 newStrfirstDiff 和 newStri 位置。...在加入前判断是否已经访问过,如果访问过就跳过该节点。将 newStr 和 cur 恢复为原始状态(恢复数组)。重复上述步骤,直到小根堆为空或者找到相同字符串。...如果为 true 跳过。

55900

Bash 手册 v3.2 - 3

如果'else'句存在, 且最后     'if'或'elif'TEST-COMMANDS都返回非0, ALTERNATIVE-CONSEQUENT-COMMANDS     被执行....如果输入'EOF', 该'select'命令结束. 所有其他     输入将导致NAME被设置为null. 每次输入后, 读入行被保存在变量'REPLY'中.    ...如果shell选项'nocasematch'被启用,     匹配不区分字符大小写. 如果字符串匹配('==')返回0, 否则('!=')返回1.    ...'=~'右边     字符串被作为增广正则表达式进行匹配(参见 regex3). 如果字符串匹配     返回0, 否则返回1. 如果正则表达式语法错误, 该条件表达式返回2....正则表达式内括号子表达式所匹配字符串被保存在数组变量     'BASH_REMATCH'中. 'BASH_REMATCH'中序号为0元素是跟整个正则表达式匹配     字符串.

1.5K10

Shell base用法描述

-gt 检测左边数是否大于右边如果是,返回 true。 [ a −gt b ] 返回 false。 -lt 检测左边数是否小于右边如果是,返回 true。...-e file 检测文件(包括目录)是否存在如果是,返回 true。...= 不相等则为真 -z 字符串 字符串长度为零为真 -n 字符串 字符串长度不为零为真 文件测试 参数 说明 -e 文件名 如果文件存在则为真 -r 文件名 如果文件存在且可读则为真 -w 文件名...如果文件存在且可写则为真 -x 文件名 如果文件存在且可执行则为真 -s 文件名 如果文件存在且至少有一个字符则为真 -d 文件名 如果文件存在且为目录则为真 -f 文件名 如果文件存在且为普通文件则为真...-c 文件名 如果文件存在且为字符型特殊文件则为真 -b 文件名 如果文件存在且为块特殊文件则为真 1.10.

28120

shell中括号(小括号,中括号,大括号)

如果我们不用绝对路径指明,通常我们用都是bash自带命令。if/test结构中左中括号是调用test命令标识,右中括号是关闭条件判断。...如果实在想用,对于字符串比较可以使用转义形式,如果比较"ab"和"bc":[ ab \< bc ],结果为真,也就是返回状态为0。[ ]中逻辑与和逻辑或使用-a 和-o 表示。    ...在[[和]]之间所有的字符都不会发生文件名扩展或者单词分割,但是会发生参数扩展和命令替换。     ②支持字符串模式匹配,使用=~操作符时甚至支持shell正则表达式。...比如,&&、||、 操作符能够正常存在于[[ ]]条件判断结构中,但是如果出现在[ ]结构中的话,会报错。     ④bash把双中括号中表达式看作一个单独元素,并返回一个退出状态码。...string};若变量var为空,把string输出到标准错误中,并从脚本中退出。我们可利用此特性来检查是否设置了变量值。

3.9K10

Shell 编程(一):Shell 变量高级用法

,将符合最短数据删除 ${变量名%%匹配规则} 从变量尾部进行规则匹配,将符合最长数据删除 ${变量名/旧字符串/新字符串} 变量内容符合旧字符串,第一个旧字符串会被新字符串取代 ${变量名//...旧字符串/新字符串} 变量内容符合旧字符串,全部字符串会被新字符串取代 例子 #!...计算字符串长度 语法 说明 方法一 ${#string} 无 方法二 expr length “$string” string 有空格,必须加双引号 获取子串在字符串索引位置 语法 说明 expr...,若不存在自动拉起该进程 1).获取系统所有用户并输出 #!...Copy 4).判断 nginx 进程是否存在,若不存在自动拉起该进程 #!

27220

Shell特殊字符

如果变量 var 为空或已被删除(unset),那么将消息 message 送到标准错误输出,可以用来检测变量 var 是否可以被正常赋值。若此替换出现在Shell脚本中,那么脚本将停止运行。...单引号括住内容,被视为常量字符串,引号内禁止变量扩展,并且单引号字符串中不能出现单引号(对单引号使用转义符后也不行) echo '$PATH';#输出$PATH 46 “” 两个双引号。...echo lvlv>file,将标准输出重定向文件file中去,如果文件存在覆盖,不能存在创建。不指定输出内容,>file,清空文件。 54 >> 输出重定向追加符。...如:(2)用于参数替代中,表示首字母小写,如果是两个逗号,表示全部小写,注意,这个特性在bash version 4时候被添加。 示例见下文。...106 -e 检测文件(包括目录)是否存在如果是,返回 true。 [ -e $file ] 返回 true。 这里附带说明一下Linux下文件类型。

5.1K10

Shell笔记2:数值运算条件测试if选择结构

运算符 num2 "|bc 如果表达式成立返回1,否则为0 常见比较操作:> = <= == !...= 几个符号区别: []:等于test,条件测试 $((expr))与$[expr]:算式替换或整数扩展,计算表达式里值 ${}:变量替换,比较精确界定变量名称范围 $():命令替换,先完成引号里命令将其结果替换出来...``:命令替换,先完成引号里命题将其结果替换出来 2.条件测试 a.test测试操作:test 选项 参数或者 [ 选项 参数] 文件状态测试: -e 判断对象是否存在存在为真 -d...= 字符串不同 [ $USER == "root" ] && echo "superman" #[ $PWD == "/" ] || echo $PWD -z 字符值为空,-n 字符串值不为空...root@kvm ~]#[ $USER == 'root' ] && [ $PWD == "/root" ] && echo "OK" || echo "NO" OK 目录/opt/testdir不存在创建目录

41210

shell programming tutorial

反引号 命令替换(将一个命令标准输出插入到命令任何位置) $()     同上 命令替换可以嵌套  如果使用反引号,内部反引号必须用反斜杠来转义。...(二)字符串测试   //字符串测试最好加上"  " [ -z $str ] 如果字符串 str 长度为0,返回真 [ -n $str ] 如果字符串 str 长度不为0,返回真 [ $str1 ==  ...获取变量值,${BASH:0:1} 可以代替 / $(...) 命令替换 $[...] 让无类型变量参与算术运算 $((...))...如果 expr 没有找到匹配模式,执行缺省值 “ *) ” 后面的命令块 ( 类似于 if  中 else ); “ *) ” 可以不出现。  ...}中第一次出现old ${var//old/new} 用new替换${var}中所有的old(全局替换) 字符串拼接: value1=home value2=${value1}"=" value3=

1.4K90

Linux模拟实现【简易版bash

证明:常显示命令输入提示符就是 bash 不断打印输出结果 输入指令后,bash 会创建子进程,并进行程序替换 证明:运行自己写程序后,可以看到当前进程 父进程 为 bash 此时可以断定神秘...bash 就是一个运行中进程,因为进程间具有独立性,因此可以同时存在多个 bash,这也是多用户登录 Linux 可以同时使用 bash 重要原因 系统自带 bash 是一个庞然大物,我们只需根据其本质...---- 2、需求分析 bash 需要帮我们完成命令解释+程序替换任务,因此它至少要具备以下功能: 接收指令(字符串) 对指令进行分割,构成有效信息 创建子进程,执行进程替换 子进程运行结束后,父进程回收僵尸进程...,这里使用 execvp execvp(argv[0], argv); exit(168); //替换失败后返回 } 具体效果(A.txt 为空,B.txt 已存在内容,程序 a.out 可以读取字符串并输出...} ---- 总结 以上就是本次关于 简易版 bash 模拟实现 全部内容了,相信你在看完本文后,也能手搓出一个简易版 bash 如果你觉得本文写还不错的话,期待留下一个小小赞,你支持是我分享最大动力

24120

收藏~ 一篇教会你写90%shell脚本

-e file :检测文件(包括目录)是否存在如果是,返回 true。 [ -e $file ] 返回 true。...---- 执行相关 命令替换 命令替换与变量替换差不多,都是用来重组命令行,先完成引号里命令行,然后将其结果替换出来,再重组成新命令行。...使用[[ … ]]条件判断结构,而不是[ … ],能够防止脚本中许多逻辑错误。比如,&&、||、 操作符能够正常存在于[[ ]]条件判断结构中,但是如果出现在[ ]结构中的话,会报错。...获取便是这个返回值 如果不加return , 默认最后一条语句执行状态所为函数执行状态返回值,如果最后一条语句执行成功,$?...相反,set +e表示不管出现任何错误继续执行脚本。 如果脚本是有状态(每个后续步骤都依赖前一个步骤),那么请使用set -e,在脚本出现错误时立即退出脚本。

2.3K10

常用 linux 命令集锦

文件中,如果已经存在,file文件被重写。...cat file1 file2 >>file表示将file1和file2内容串接后输入到file文件中,如果已经存在,新内容追加在file文件原内容后面。...-e 若字符串出现以下字符,特别加以处理,而不会将它当成一般文字输出: \a 发出警告声; \b 删除前一个字符; \c 最后不加上换行符号;...一些特殊字符使用   "^"表示行首   "$"符号如果在引号中表示行尾,但是在引号外却表示末行(最后一行) # 注意这里 " & " 符号,如果没有 "&",就会直接将匹配到字符串替换掉...如果找到一个新正则表达式root开头记录,继续打印直到下一个以正则表达式mysql开头记录为止,或到文件末尾。

4.4K10

Linux云计算运维之Shell

~ B 判断字符串A中是否不包含能匹配B表达式字符串 动作(Action): 格式化输出 流程控制语句 sed命令 sed主要是用来将数据进行选取、替换、删除、新增命令,我们看看命令语法...d : 删除,删除指定行。 p :打印,输出指定行。 s :字串替换,用一个字符串替换另外一个字符串。...如果替换为空,证明num1值为数字 #如果不能替换为空,证明num1值为非数字。...case语句语法如下 : case $变量名 in “值 1” ) 如果变量值等于值1,执行程序 1 ;; “值 2” ) 如果变量值等于值2,执行程序 2 ;; … 省略其他分支...如果数值符合,执行对应程序,如果数值不符,依次比较下一个值。如果所有的值都不符合,执行“)” (“”代表所有其他值)中程序 case语句以“case” 开头,以 “esac” 结尾。

5.6K30

sh脚本

不允许出现空格和标点符号。 变量声明语法如下。 variable=value Bash 没有数据类型概念,所有的变量值都是字符串。 读取变量 读取变量时候,直接在变量名前加上$就可以了。...上面代码出现在脚本中,1表示脚本第一个参数。如果该参数不存在,就退出脚本并报错。...如果指定长度为2,返回lo。 搜索和替换 Bash 提供字符串搜索和替换多种方法。 字符串头部模式匹配 以下两种语法可以检查字符串开头,是否匹配给定模式。...# 模式必须出现字符串开头 ${variable/#pattern/string} # 模式必须出现字符串结尾 ${variable/%pattern/string} 改变大小写 下面的语法可以改变变量大小写...[ -n string ]:如果字符串string长度大于零,判断为真。 [ -z string ]:如果字符串string长度为零,判断为真。

10.7K30

Linux Shell基础篇二 - 变量

bash环境中, 变量默认类型都是字符串类型, 无法直接进行数值运算 变量如果有空格, 必须使用双引号括起来 不能使用Shell关键字作为变量名称 变量取值: 12345 # 语法1: 直接使用变量名查询...但字符串中不能出现空格,否则空格后边字符串会作为其他变量或者命令解析。...} 将旧字符串替换成新字符串替换所有 ${path//sbin/SBIN}将sbin替换成SBIN,所有的都替换 变量测试及默认值: 变量设定方式 str没有设定 str为空字符串 str已设定非为空字符串...只会将表达式值输出到标准错误,并不会赋值给var。 +与上面的规则相反,它表示只有str有设定值时才会将表达式值赋值给var,如果没有设定值,var赋值为空。...:意义在于,如果不加:默认空字符串也表示str有设定值,而加上:表示如果str设定了值,但值为空字符串,依然当作str没有设定值处理。

2.7K40

shell编程基础入门

若此替换出现在Shell脚本中,那么脚本将停止运行。${var:+word}如果变量 var 被定义,那么返回 word,但不改变 var 值。 请看下面的例子: #!...-gt检测左边数是否大于右边如果是,返回 true。[ $a -gt $b ] 返回 false。-lt检测左边数是否小于右边如果是,返回 true。...-ge检测左边数是否大等于右边如果是,返回 true。[ $a -ge $b ] 返回 false。-le检测左边数是否小于等于右边如果是,返回 true。...-e file检测文件(包括目录)是否存在如果是,返回 true。[ -e $file ] 返回 true。 #!...Shell字符串 单引号:单引号里任何字符都会原样输出,单引号字符串变量是无效 双引号: 可以有变量,可以出现转义字符。

1.3K40
领券