Scripting

處理 bash 腳本 redux 中的嵌套引號

  • May 22, 2020

我想建構一個包含嵌套雙引號的 bash 腳本。我已經嘗試了所有常用的技巧,尤其 rprint是每個人都推薦的技巧。但是我嘗試過的任何東西都不起作用。特別是,rprint -v name "%q "讓我嵌套引號,但我無法處理\它放在引號前面的 ‘s。最後我選擇了這個極其粗糙的組合:

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 程序員在這種情況下會做什麼嗎?非常感謝您的任何建議

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"

引用自:https://unix.stackexchange.com/questions/588229