处理 bash 脚本 redux 中的嵌套引号

处理 bash 脚本 redux 中的嵌套引号

我想构建一个包含嵌套双引号的 bash 脚本。我已经尝试了所有常见的技巧,特别是 rprint每个人都推荐的技巧。但我尝试过的都不起作用。特别是,rprint -v name "%q "让我嵌套引号,但我无法处理\它放在引号前面的 。最后我决定采用这个极其粗糙的拼凑:

shCommand=`echo !ssh -p $othPort!`
execThis=`echo rsync -e $sshCommand etc etc | tr '!' '"'`
eval $execThis

因此 execThis 就是我想要的,即

 rsync -e "ssh -p XXXX" etc etc

但必须有更好的方法来做到这一点,因为 a)它是极其粗略和b)如果我需要的话它将无法工作!在下面的行中——似乎有从未使用过的特殊字符bash。有人能告诉我真正的 bash 程序员在这种情况下会做什么吗?非常感谢您的任何建议

答案1

othPort=XXXX
shCommand="ssh -p $othPort"
cmdline=(rsync -e "$shCommand" etc etc)
"${cmdline[@]}"
othPort=XXXX
shCommand="ssh -p $othPort"
cmdline="rsync -e \"$shCommand\" etc etc"
eval "$cmdline"

相关内容