您的位置:首页 > 运维架构 > Shell

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标准支持,也利于嵌套。
  • $()
    可以多层嵌套类似
    $($($()))
( cmd )与 { var }

区别:`

  • ( )
    只是对一串命令重新开一个 子 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.

参考博客

https://www.geek-share.com/detail/2724949881.html

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: