我尝试运行一个内部带双引号的命令:
insdizi=`ps -ef| grep -v grep | grep asm_pmon_ | awk ' {print $2}'`
proddizi=`ps -ef | grep asm_smon_ | grep -v grep | cut -d"_" -f3`
insname=()
homename=()
sid=()
for i in $insdizi; do
insname+=( "$i" )
a=`ls -l /proc/${insname[ii]}/cwd | awk '{print ($NF) }' |sed 's#/dbs##'`
olsnodes="${a}/bin/olsnodes"
homename+=( "$olsnodes" )
ii=`expr $ii + 1`
done
ii=`expr $ii - 1`
for i in `seq 0 $ii`; do
nodeNum= "${olsnodes}"
nodeNumm= `bash -c "${nodeSayi} |grep -c '""'"`
echo $nodeNumm
echo "nodeNumm= $nodeNumm"
for node in `bash -c "${homename[i]}"`; do
echo $node
cokluBellekKontrol $node
cokluSessionSayi $node
done
完成
olsnodes
变量是一个从以下目录运行的命令:
/app/oracle/grid/bin/olsnodes
以下是我需要运行的内容:
/app/oracle/grid/bin/olsnodes | grep -c ""
我试过了:
nodeNumm= `bash -c "${nodeNum} |grep -c '""'"`
但它给了我错误:
"0: command not found."
修改
olsnodes的输出是:
ax1
ax2
ax3
ax4
另外,我可以用这个命令grep行数:
/u01/app/11.2.0.4/grid/bin/olsnodes |grep -c ""
答案 0 :(得分:1)
单引号和双引号不会相互嵌套。只有带括号和括号的替换(${}
,$()
,$(())
)可以。
您可以使用\
在引号内转义引号。
nodeNumm= `bash -c "${nodeSayi} |grep -c '""'"`
应该是
nodeNumm= $(bash -c "${nodeSayi} |grep -c '\"\"'")
还是应该呢?你想做吗
grep -c ""
或
grep -c '""'
如果是前者,它可以简单地写成
grep -c ''
将 放在双引号中没有问题。
然后我怀疑,除非你期望它,否则仍然没有达到你的预期:
nodeNumm
设置为空字符串,持续时间为如果要将nodeNumm
设置为命令的输出,请使用正确的语法:
nodeNumm=$(bash -c "${nodeSayi} | grep -c '\"\"'")
然而,在子shell中运行grep
没有意义,这可以让我们摆脱外部引号和整个嵌套问题。刚
nodeNumm=$(bash -c "${nodeSayi}" | grep -c '""')
请注意,我将流程替换从反引号更改为$()
。这正是因为它在其他过程替换和引用方面正确嵌套。