在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
1.反引号与$()用于命令替换 反引号和$()的作用相同,用于命令替换(command substitution),即完成引用的命令的执行,将其结果替换出来,与变量替换差不多。比如: echo `date '--date=1 hour ago' +%Y-%m-%d-%H` #或者 echo $(date '--date=1 hour ago' +%Y-%m-%d-%H) 输出结果是相同的:
在编写Shell脚本时建议使用$(),原因主要有: command1 `command2 `command3`` 原本的意图是要在`command2 `command3` `中先将command3替换出来给command2处理,然后再将结果传给command1处理。然而,真正的结果在命令行中却是分成了`command2`与` `两段。正确的输入应该如下: command1 `command2 \`command3\`` #或者换成$() command1 $(command2 $(command3)) (3)反引号中对于反斜杠有特殊的处理,使用反协议对Shell特殊字符进行转义时需要两个反斜杠,而 var1=`echo \$HOME` #使用一个反斜杠无法完成对$符的转义 var2=`echo \\$HOME` var3=$(echo \$HOME) echo $var1 echo $var2 echo $var3 脚本执行结果:
综上所述, 反引号是一个老的用法,$()是新的用法,无论是在学习还是实际工作中,建议使用$()。 2.${}用于变量替换 2.1直接变量替换 一般情况下, A="dablelv" echo $AB 原本是打算先将 echo ${A}B 2.2特殊变量替换
file="/dir1/dir2/dir3/my.file.txt" 2.2.1 字符串提取可以使用 (1) ${file:1}:提取第1个字符及其后面的所有字符:dir1//dir2/dir3/my.file.txt ${file: -3}:提取最后3个字符,注意冒号后面添加一个空格:txt ${file:1-4}:提取最后3个字符,冒号后面不需要添加空格:txt ${file:(-3)}:提取最后3个字符,冒号后面不需要添加空格:txt (2) ${file:0:5}:提取最左边的5个字符:/dir1 ${file:5:5}:提取从第5个字符开始右边的连续5个字符:/dir2 2.2.2
${file/dir/path}:将第一个dir替换为path:/path1/dir2/dir3/my.file.txt ${file//dir/path}:将全部dir替换为path:/path1/path2/path3/my.file.txt 2.2.3 可以过滤掉符合指定规则的字符串,不改变原变量。 ${file#*/}:拿掉第一个 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt ${file##*/}:拿掉最后一个 / 及其左边的字符串:my.file.txt ${file#*.}:拿掉第一个 . 及其左边的字符串:file.txt ${file##*.}:拿掉最后一个 . 及其左边的字符串:txt ${file%/*}:拿掉最后一个 / 及其右边的字符串:/dir1/dir2/dir3 ${file%%/*}:拿掉第一个 / 及其右边的字符串:(空值) ${file%.*}:拿掉最后一个 . 及其右边的字符串:/dir1/dir2/dir3/my.file ${file%%.*}:拿掉第一个 . 及其右边的字符串:/dir1/dir2/dir3/my 记忆的方法为:
关于变量替换符 以上就是区分shell中的 反引号、$()和${}的详细内容,更多关于shell中的 反引号、$()和${}的资料请关注极客世界其它相关文章! |
请发表评论