在执行过程中,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