スクリプトでスペースを含む文字列を正しく置き換える方法

スクリプトでスペースを含む文字列を正しく置き換える方法

私のスクリプトには次のものがあります。

sshkey="/Users/me/some path/with spaces/id_rsa"
dstport=...
dstparent=...
dstuserhost=...

rsync -az --delete -e "ssh -i $sshkey -p $dstport" $src $dstuserhost:$dstparent

私がそれを実行すると、私は得ます:

rsync: "/Users/me/some" の link_stat 失敗: 対応するファイルまたはディレクトリなし (2)

ベストアンサー1

周囲に一重引用符を追加すると、$sshkey問題が解決します。

rsync -az --delete -e "ssh -i '$sshkey' -p '$dstport'" "$src" "$dstuserhost:$dstparent"

$sshkeyは二重引用符で囲まれた文字列内にあるため、呼び出し前にインタラクティブシェルによって拡張されますが、単一引用符は、接続を確立するために呼び出しが行われたrsyncときに文字列がもはや分割されるのを防ぎます。rsyncssh

$sshkeyそれ自体に一重引用符文字が含まれていないとします。

おすすめ記事