shell脚本中倒引号,$(), eval的区别
来源:互联网 发布:陕西省网络作家协会 编辑:程序博客网 时间:2024/06/07 13:59
在Shell脚本中,当我们vim test.sh输入以下文本:
echo dateecho `date` echo $(date)
执行./ test.sh,显示:
date
2017年 06月 26日 星期一 15:56:04 CST
2017年 06月 26日 星期一 15:56:04 CST
在这个例子中,我们可以看出,第一个是直接打印date字符串,而二三则是先执行date命令,然后将执行的结果打印出来。
因此,总结一下,倒引号和$()都是先执行命令然后将执行的结果替换到当前命令行。 然而这两者有什么区别吗?
区别是:当倒引号或者$() 和转义字符一起使用会有不同
我们还是看一个例子:
echo `echo \$PWD` echo $(echo \$PWD)
当执行./ test.sh 结果显示为:
/home/xuyang/bit_class/script_shell$PWD
为什么会这样?我们根据结果来分析,第一个打印PWD里面的内容,说明 \ 并没有什么卵用,而第二个只输出了PWD,说明转义字符起作用了,因此我们可以推测:
**倒引号已经对 \ 已经转义了,因此想要实现转义需要再加个 \
而$()则没影响,\照常使用**
我们验证下推测:
echo `echo \\$PWD` echo $(echo \\$PWD)
当执行./ test.sh 结果显示为:
$PWD\/home/xuyang/bit_class/script_shell
结果验证了我们的猜想:
对于倒引号,\\表示转义,对$进行转义,这样子就打印出$PWD四个字母,说白了在倒引号中想要转义,必须成对使用\
对于$(),\\则表示对第二\转义,因此会先打印出\,然后再打印出当前目录
和上面两者类似的还有一个命令,eval,那么eval是什么?又该如何使用?与上面有什么区别?
eval [arguments]主要用来两次扫描参数
比如
redirect=">"ls $redirect fileeval ls $redirect file
当使用eval时候,第一次扫描将$redirect替换为>,第二次执行ls > file,因此完成重定向功能。
eval可以取得最后的参数:eval echo \$$#
用eval命令创建指向变量的“指针”,有点类似第一点
#!/bin/bashx=10ptr=xeval echo \$$ptreval $ptr=20eval echo \$$ptr
结果是:
1020
关于eval参考了这篇博客
- shell脚本中倒引号,$(), eval的区别
- shell脚本中命令代换:反引号、$()、eval区别
- shell中反引号和$()的区别以及eval命令
- shell 脚本中双引号 单引号 反引号 的区别
- shell 脚本中双引号 单引号 反引号 的区别
- shell 脚本中双引号 单引号 反引号 的区别
- shell 脚本中双引号、单引号、反引号的区别
- Shell脚本中反引号`和$()的区别
- shell 脚本中双引号 单引号 反引号 的区别
- shell 脚本中双引号、单引号、反引号的区别
- 倒引号(``) $() eval
- eval && 倒引号 && $()
- shell中的eval以及与 反引号``、$()的区别
- Linux日常——shell脚本中 “`”、“$()”、eval 的区别
- Linux中双引号,单引号,倒引号的区别
- Shell中反引号和$()的区别
- shell---反引号,$( )以及eval的比较
- shell中eval的神奇之法,shell中引号的争端
- App相关工具类
- Html5 表单属性
- Html5 内联SVG
- android_WindowManager.LayoutParams.type属性
- 为树莓派做系统备份镜像(for Linux & Mac)
- shell脚本中倒引号,$(), eval的区别
- 尺寸相关工具类
- 响应式网站与自适应网站的比较
- 切入点
- LeetCode:Search a 2D Matrix II
- bootstrap 3 去除面包屑导航li的分割符/
- 【JVM】字节码执行引擎
- 在 JNI 编程中避免内存泄漏
- cookie,session优缺点