Shell中的命令替换及变量扩展
2019-07-22 23:42
274 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_38287155/article/details/96108208
命令替换
命令替换就是在SHELL 内嵌套多条命令,一次性执行得到结果。
一层Shell嵌套echo whoami whoami echo 'whoami' whoami echo "whoami" whoami echo `whoami` root echo $(whoami) root echo "hello,`whoami`" hello,root echo "hello,$(whoami)" hello,root二层Shell嵌套
编写test.tx文件,里面只有ls命令
shell> echo `cat ./test.txt` | sed -s "s;$; -l;" shell> ls -l shell> $(echo `cat ./test.txt` | sed -s "s;$; -l;") shell> 打印当前目录下所有文件,上面的语句其实转化为$(ls -l)
之前在简单 SHELL 一层嵌套中说了嵌套还有另一种。那为什么不使用` `进行嵌套。
- ` `不支持命令嵌套执行
- 强制执行。也只能认出第一组,其余按照空格作为间隔各个执行 或 按照管道符(含)直到末尾执行
- 比较陈旧。容易与“单引号”混淆。
- 已有替代品。
$(...)
格式受到POSIX标准支持,也利于嵌套。 $()
可以多层嵌套类似$($($()))
区别:`
( )
只是对一串命令重新开一个 子 shell 进行执行,{ }
对一串命令在 当前 shell 执行( )
括号内的语句影响在括号内;{ }
括号内的语句影响到全局
shell> var=test shell> ( echo $var;var=global;echo $var; ) test global shell> echo $var test shell> var=test shell> { echo $var;var=global;echo $var; } test global shell> echo $var global
变量拓展
基本变量扩展的基本格式是
${ parameter },扩展的结果是
${ parameter }被替换为相应的值。
shell> vim test.sh ban=ban echo a $banban echo a $(ban)an echo a ${ban}an shell> . test.sh a -bash: ban: command not found #这里可知$()里只能是命令,而${}里是变量 a an a banan替换
使用
${parameter:parameter}对变量进行替换
#定义 var='This is one test sentence.' var1=parameter var2=word # ${var1:-var2}表示如果 var1 未设置或为空,则替换成 var2。 shell> echo ${var1:-$var2} parameter shell> var1= shell> echo ${var1:-$var2} word # ${var1:?var2}表示当变量 var1 未设置或为空,shell 也是可交互时,进行报错并且退出。如果 shell 不可交互,则发生变量替换。 shell> var1= shell> echo ${var1:?var2} bash: var1: var2 shell> echo $? 1 # ${var1:+var2}表示如果 var1 为空或未设置,那么就什么都不做。不然使用 var2 进行替换。 shell> var1= shell> echo ${var1:+var2} shell> var1=parameter shell> echo ${var1:+var2} word切片
#同方向 shell> echo ${var:8:17} one test sentence #范围切片(非同向) shell> echo ${var:8:-1} one test sentence #切片位置 shell> a='This is one' shell> echo ${#a} 11 #a此时表示a的长度修改
#简单替换 shell> echo ${var} This is one test sentence. shell> echo ${var/one/a} This is a test sentence. #简单删除1 shell> echo ${var%sentence.} This is one test #简单删除2 shell> echo ${var#This is} one test sentence.
参考博客
相关文章推荐
- 四、shell替换:变量、命令、转义字符的替换
- Shell替换:Shell变量替换,命令替换,转义字符
- Shell变量替换,命令替换,转义字符
- 七、Shell替换:Shell变量替换,命令替换,转义字符
- Shell变量替换,命令替换,转义字符
- Shell: 变量替换 命令替换 & ~波浪号替换的区别
- 单引号内引入变量 shell 命令输出赋值给变量,以及用变量替换命令
- Shell替换:Shell变量替换,命令替换,转义字符
- shell 变量替换与扩展
- shell变量的替换,命令的替换,转义字符
- Shell替换:Shell变量替换,命令替换,转义字符
- Shell替换:Shell变量替换,命令替换,转义字符
- Shell替换:变量替换,命令替换,转义字符
- Shell替换:Shell变量替换,命令替换,转义字符
- 【Shell脚本学习9】Shell替换:Shell变量替换,命令替换,转义字符
- Shell替换:Shell变量替换,命令替换,转义字符
- Shell替换:Shell变量替换,命令替换,转义字符
- Shell替换:Shell变量替换,命令替换,转义字符
- Shell替换:Shell变量替换,命令替换,转义字符
- Shell替换:Shell变量替换,命令替换,转义字符