当前位置:   LINUX > 正文

与仅评估变量相比,eval/bash -c的意义何在?

unix,linux,bash,shell,sh,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发工具,前端开发工具,开发人员工具,站长工具

假设您将以下命令存储在变量中:

COMMAND='echo hello'

有什么区别

$ eval "$COMMAND"
hello

$ bash -c "$COMMAND"
hello

$ $COMMAND
hello

?为什么最后一个版本几乎从不使用,如果它更短并且(据我所知)完全相同的事情?



1> Charles Duff..:

第三种形式与其他两种形式完全不同 - 但要理解为什么,我们需要在解释命令时按bash进行操作,并查看每种方法在使用时遵循哪些操作.

Bash解析阶段

    报价处理

    拆分命令

    特殊操作员解析

    展开

    单词分裂

    通配符

    执行


运用 eval "$string"

eval "$string"遵循从#1开始的所有上述步骤.从而:

字符串中的字面引号成为语法引号

特殊操作员如>()被处理

像这样的扩展$foo很荣幸

这些扩展的结果在字符上分成空格分成单独的单词

如果这些单词解析为相同且具有可用匹配,那么这些单词将扩展为globs,最后执行该命令.


运用 sh -c "$string"

...执行与此相同eval,但在作为单独进程启动的新shell中 ; 因此,当这个新进程退出时,对变量状态,当前目录等的更改将到期.(注意,那就是,新的外壳可以是不同的解释支持不同的语言;即sh -c "foo"不支持相同的语法bash,ksh,zsh等做的).


运用 $string

...从第5步开始,"Word Splitting".

这是什么意思?

行情不受尊重.

printf '%s\n' "two words"因此printf %s\n "two words",将解析为(通常/期望的行为)printf %s\n two words(由shell使用引号).

不会分裂成多个命令(;s,&s或类似).

从而:

s='echo foo && echo bar'
$s

...将发出以下输出:

foo && echo bar

...而不是以下,否则将是预期的:

foo
bar

特殊运营商和扩张不受尊重.

$(foo),不$foo,不<(foo),等等

重定向不受尊重.

>foo或者2>&1只是字符串拆分创建的另一个单词,而不是shell指令.

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/LINUX/detail/18271
推荐阅读
  • 如何解决《单个开发人员的源控制系统》经验,为你挑选了10个好方法。version-control,c#,服务器,go,git,svn,windows,linux,eclipse,分布式,bash,python,sql,安全,html,Dev... [详细]

  • 顺便求websocket下载链接php,websocket,swoole,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发工具,前端开发工具,开发人员工具,站长工具顺... [详细]

  • 如何解决《从文件名中删除路径》经验,为你挑选了2个好方法。go,linux,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发工具,前端开发工具,开发人员工具,站长工具... [详细]

  • Swoole是一个使用C语言编写,作为PHP扩展运行的的高性能网络服务器框架。提供了一个全异步、非阻塞、并行的PHPSocketServer实现。PHP开发者仅需要编写回调函数即可。swoole,c语言,php,服务器,udp,https,... [详细]

  • 这篇文章主要介绍了PHP编程中尝试程序并发的几种方式总结,这里举了借助yield的异步以及swoole_process的进程创建等例子,PHP本身并不支持多线程并发,需要的朋友可以参考下PHP,并发,进程,异步,php,swoole,udp... [详细]

  • 如何解决《八进制数字文字:什么时候?为什么?自从?》经验,为你挑选了7个好方法。c,numbers,linux,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发工具,... [详细]

  • 如何解决《P/InvoinMono》经验,为你挑选了1个好方法。.net,linux,mono,pinvoke,solaris,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳... [详细]

  • PHP的swoole扩展安装方法详细教程,phpswoole安装方法。PHP的swoole扩展安装方法详细教程,phpswoole安装方法Swoole支持PHP5.3.10以上版本,所以安装Swoole之前请先安装PHP5.3.10以上版本... [详细]

  • 看到这篇文章MySQL的连接池、异步、断线重连请问有详细的说明吗?最好有实例代码php,swoole,mysql,数据库连接池,go,hive,git,https,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,js... [详细]

  • 如何解决《有没有重新格式化C#代码的工具?》经验,为你挑选了1个好方法。c#,code-formatting,linux,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线... [详细]

  • 如何解决《用g++更改默认的C++标准》经验,为你挑选了0个好方法。c++,linux,g++,c++11,bash,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发... [详细]

  • swoole安装:1、PECL安装,先使用“apt-getinstalllibpcre3libpcre3-dev”命令安装依赖包。2、使用“peclinstallswoole”命令安装swoole。3、修改PHP配置php.in。swool... [详细]

  • 如何解决《什么是linuxirq域名,为什么需要它们?》经验,为你挑选了1个好方法。linux,interrupt,linux-device-driver,linux-kernel,embedded-linux,DevBox,在线流程图,编... [详细]

  • 如何解决《在ASP.NETCore应用程序中使用NLog》经验,为你挑选了2个好方法。nlog,asp.net-core,ms-extensions-logging,git,go,asp.net,mvc,linux,DevBox,在线流程图... [详细]

  • 简单的php性能注意点,简单php性能。简单的php性能注意点,简单php性能什么情况,可能遇到性能问题:1.php语法使用的不恰当2.使用php语言做了它不擅长做的事3.用php语言连接php,程序员,swoole,apache,服务器,... [详细]

  • 不是的,如果启动一个TCP服务器,就会启动了3个worker进程,3个task进程,因为启用了task功能,所以必须注册onTask、onFinish2个事件的回调函数。swoole,php,服务器,DevBox,在线流程图,编程,编程问答... [详细]

  • 这篇文章主要介绍了Python利用numpy实现三层神经网络的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧numpy三层神经网络,numpy,神经网络,pyt... [详细]

  • 目前,遇到过的用多线程异步非阻塞的情况:1发送电子邮件。2记录日志3手机消息推送(使用个推)。4发送短信使用单线程同步阻塞花费时间很长解决方案:1公司目前的解决方案:gearman2swoole:swoole,DevBox,在线流程图,编程... [详细]

  • 如何解决《UNIX(AIX)脚本,仅使用awk或其他文件处理实用程序处理文件》经验,为你挑选了0个好方法。linux,bash,aix,awk,ibm-mq,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解... [详细]

  • PHP的C扩展开发入门指南PHP的C扩展开发入门指南,php,git,https,svn,go,swoole,hive,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开... [详细]

相关标签
  

闽ICP备14008679号