在执行过程中,echo看起来命令是正常的,但是我们加上set -x可以看到,$cmd实际上被转移了。如下图所示:
在这里插入图片描述

红线画出部分,被默认加上了单引号。如果在实际使用shell调用其他脚本中,可能会使命令被变更。

解决方法:
使用sh -c "$cmd"解决

文章目录shell执行命令被默认加上单引号shell执行命令被默认加上单引号遇到一个问题,在shell中执行命令中同时含有双引号和空格时,如:vim test.sh#/bin/shset -xcmd="echo \"task : hhh\""echo $cmd$cmd在执行过程中,echo看起来命令是正常的,但是我们加上set -x可以看到,$cmd实际上被转移了。如下图所示...
命令 替换(command substitution)是指 Shell 执行 命令 并将 命令 替换部分替换为 执行 命令 后的结果。 命令 替换有两种方式: 1. 使用 backtick 符号(即 …,反 引号 ,重音符号)。 代码如下:for i in `cd /old/code/dir ; echo *.c`do    diff -c /old/code/dir/$i $i | moredone 2. 使用 $(…) 的方式。 代码如下:for i in $(cd /old/code/dir ; echo *.c)do    diff -c /old/code/dir/$i $idone | more
1.反斜线 反斜线可以将紧随其后的单个字符视为字面意思上的字符。 另外,如果在 命令 的末尾使用 \ 回车后,\可以将回车的 命令 提交功能屏蔽,从而将回车认为是换行继续输入 命令 ,实现 命令 的多行输入功能。 下面以实例理解: 2.单 引号 引号 可以将它中间的所有任意字符还原为字面意思。 3.双 引号 引号 用于一段话。不会屏蔽字符的含义 4.反 引号 shell 中使用反 引号 进行 命令 替换,命...
1.反 引号 与$()用于 命令 替换 反 引号 和$()的作用相同,用于 命令 替换(command substitution),即完成引用的 命令 执行 ,将其结果替换出来,与变量替换差不多。比如: echo `date '--date=1 hour ago' +%Y-%m-%d-%H` echo $(date '--date=1 hour ago' +%Y-%m-%d-%H) 输出结果是相同的: 2019-02-02-09。 在编写 Shell 脚本时建议使用$(),原因主要有: (1)反 引号 与单 引号 外形相似,容易混淆; (2)在多层次的复合替换中,里层的反 引号 需要转义处理(\`) ,而$()则
Linux Shell 中有三种 引号 ,分别为双 引号 (” “)、单 引号 (‘ ‘)以及反 引号 (` `)。 其中双 引号 对字符串中出现的$、”、`和\进行替换;单 引号 不进行替换,将字符串中所有字符作为普通字符输出,而反 引号 中字符串作为 shell 命令 执行 ,并返回 执行 结果。具体含义如下: 双 引号 (” “):在双 引号 中,除了$, ”, `和\以外所有的字符都解释成字符本身。 单 引号 (’ ‘):在单 引号 中所有的字符包括特殊字符($,”,`和\)都将解释成字符本身而成为普通字符。 反 引号 (` `):在反 引号 中的字符串将解释成 shell 命令 执行 。 root@gyb-ubuntu:~# echo $PA
引号 (" "):在双 引号 中,除了$  ''  ` \  四中符号以外所有的字符都解释成字符本身。 单 引号 (' '):在单 引号 中所有的字符包括特殊字符($,'',`和\)都将解释成字符本身而成为普通字符。就是说单 引号 里面的东西都是普通字符串 反 引号 (` `):在反引...
原文: https://blog.csdn.net/deyili/article/details/5471023 ----------------------------------------------------------------------------------------------------------------------- shell 进程是 执行 其它进程的进程,但在 执行 一...
#!/bin/bash nohup python3 -u run0001.py >./out/0001.out & nohup python3 -u run0002.py >./out/0002.out & 说明:nohup加在一个 命令 的最前面,表示不挂断的运行 命令 -u 表示实时输出到.out &加在一个 命令 的最后面,表示这个 命令 放在后台 执行 《Linux一线运维实战》清华大学出版社,即将出版 在 shell 引号 分为单 引号 (’ ’)、双 引号 (” ”)和反 引号 ()。 被单 引号 括起的字符串(包括特殊字在内),这些字符串就会失去特殊的意义而只作为普通字符解释;双 引号 括起来的字符串除 $ 、’、和”仍保留特殊的功能,其余字符则被视为普通字符;反 引号 括起的字符串被 shell 解释为 命令 行,在 执行 shell 将其解释后直接输出不包括反 引号 在内的结果。 SHELL 中的单 引号 shell 中定义字符串时就会涉及到空格或引用字符串原意的问
shell 脚本中,单 引号 、双 引号 和反 引号 都是用来表示字符串的。其中,单 引号 表示的是一个固定的字符串,不会对其中的任何字符进行转义或者替换;双 引号 表示的是一个可以进行变量替换和转义的字符串;反 引号 表示的是一个可以 执行 命令 并返回结果的字符串。 举个例子,如果我们要定义一个包含变量的字符串,可以这样写: name="Alice" echo "My name is $name" 输出结果为: My name is Alice 如果我们使用单 引号 来定义字符串,那么其中的变量就不会被替换: name="Alice" echo 'My name is $name' 输出结果为: My name is $name 如果我们使用反 引号 来定义字符串,那么其中的 命令 会被 执行 并返回结果: echo "Today is `date`" 输出结果为: Today is Fri Oct 22 16:08:23 CST 2021