开发者社区> 问答> 正文

执行命令导致实际执行的是历史命令

问题描述



具体现象是。比如,执行如下指令:

  1. curl "http://xxxx.com/bao/uploaded/i3/2245429602/TB24JupcFXXXXaAXXXXXXXXXXXX_!!2245429602.jpg"

但实际执行的却是::

  1. curl "http://xxxx.com/bao/uploaded/i3/2245429602/TB24JupcFXXXXaAXXXXXXXXXXXX_wget " http :// xxxx . com / bao / uploaded / i3 / 2245429602 / TB24JupcFXXXXaAXXXXXXXXXXXX_ls2245429602 . jpg "2245429602.jpg"

展开
收起
开发者说 2019-07-22 14:40:11 671 0
1 条回答
写回答
取消 提交回答
  • 问题原因



    执行的命令中包含字符,该字符在 shell 里面是特殊字符,指的是执行历史命令。

    处理办法



    如果要让等特殊字符不转义的话,需要在前面加个\ 比如:

    1. curl "http://xxxx.com/bao/uploaded/i3/2245429602/TB24JupcFXXXXaAXXXXXXXXXXXX_\!\!2245429602.jpg"   #这个样就不会转义了。

     

    另外,Linux 的 shell 下常用的元字符说明:

    字符 说明 IFS 三者之一组成(我们常用 space )。 CR 产生。 = 设定变量。 $ 作变量或运算替换(请不要与 shell prompt 搞混了)。 > 重导向 stdout。 < 重导向 stdin。 | 命令管线。 & 重导向 file descriptor ,或将命令置于背境执行。 ( ) 将其内的命令置于 nested subshell 执行,或用于运算或命令替换。 { } 将其内的命令置于 non-named function 中执行,或用在变量替换的界定范围。 ; 在前一个命令结束时,而忽略其返回值,继续执行下一个命令。 && 在前一个命令结束时,若返回值为 true,继续执行下一个命令。 || 在前一个命令结束时,若返回值为 false,继续执行下一个命令。 ! 执行 history 列表中的命令。*
    2019-07-22 14:40:27
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载