在字符串中包含双引号

在字符串中包含双引号

我的命令是

X=`ssh ${OS_USER}@${OS_HOST} ". ~/.kshrc ;
   ulimit -c unlimited ;
   cd ${OS_PATH}/NEW_BL1_RC_RATE/bin/conf;
   echo "export RC_DB_INSTANCE=$7" >> RC_CONV_SET_VARS"`

$7应该用双引号引起来。怎样才能做到呢?

答案1

您有多层嵌套双引号。这变得非常棘手,非常丑陋,并且非常难以阅读和修改。例如`

ssh ${OS_USER}@${OS_HOST} \
    ". ~/.kshrc; ... ;
     echo \"export RC_DB_INSTANCE=\\\"\\\$7\\\"\" >> RC_CONV_SET_VARS".

echo(注意:我在我的系统上测试了多引号bash -c,它可以工作,但我什至不能 100% 确定它能在 中工作ssh。多级引号和反斜杠是 PITA,应该避免)

然后,如果 RC_CONV_SET_VARS 不是文字文件名而是变量名,情况会变得更加复杂......进一步复杂取决于 RC_CONV_SET_VARS 是本地系统还是远程系统。

编写一个简单的一次性脚本,scp将其发送到远程主机,然后使用ssh.

例如:

将以下内容另存为myscript.ksh

#! /usr/bin/ksh
. ~/.kshrc
ulimit -c unlimited
cd ${OS_PATH}/NEW_BL1_RC_RATE/bin/conf
echo 'export RC_DB_INSTANCE="$7"' >> "$RC_CONV_SET_VARS"

然后scp它到远程主机并运行它:

scp myscript.ksh "${OS_USER}@${OS_HOST}:/tmp/"
ssh "${OS_USER}@${OS_HOST}" 'ksh /tmp/myscript.ksh'

仍有一些引用问题需要解决,但它们与编写打算在本地系统上运行的脚本时的引用几乎相同。反斜杠转义和引号的多个级别并不丑陋、复杂和令人困惑。

如果这看起来不切实际,因为您必须多次输入密码,那么就不要这样做 - 设置基于密钥的身份验证并不要在 ssh 中使用基于密码的身份验证

顺便说一句,您可以在命令行上传递您需要的任何参数ksh myscript.sh

ssh "${OS_USER}@${OS_HOST}" 'ksh /tmp/myscript.ksh arg1 arg2 arg3'

或者,如果您需要传递第 7 个参数当地的脚本到远程脚本:

ssh "${OS_USER}@${OS_HOST}" "ksh /tmp/myscript.ksh \"$7\""

并将上面的最后一行更改myscript.ksh为:

echo "export RC_DB_INSTANCE=\"$1\"" >> "$RC_CONV_SET_VARS"

答案2

您必须“转义”引号:

echo "export RC_DB_INSTANCE=\"$7\""

会成功的...

相关内容