以下のスクリプトはbashでは機能しますが、zshでは機能しません。私はこれが変数内でOPTS
変数を「拡張」(正しい単語かどうかわからない)していて、この構文が$EXCLUDE
zshでは機能しないためだと思います。 zshで動作するようにこの行をどのように変更できますか?
SRC="/path_to_source"
DST="/path_to_dest"
EXCLUDE=".hg"
OPTS="-avr --delete --progress --exclude=${EXCLUDE} --delete-excluded"
rsync $OPTS $SRC $DST
ベストアンサー1
ここでの問題は、$OPTS
コマンドラインで複数のパラメータに区別されないことですrsync
。zsh
構文では、次を使用します。
rsync ${=OPTS} $SRC $DST
(代替は、オプションを使用してグローバルに標準シェル動作をエミュレートすることです-o shwordsplit
...)
マンページから:
[in]の一般的な違い
zsh
は、コマンドラインで置き換えられた変数が単語に分割されないことです。SH_WORD_SPLIT
「パラメータ拡張」セクションのシェルオプションの説明を参照してくださいzshexpn(1)
。では、zsh
明示的に分割を要求したり(たとえば${=foo}
)、変数を複数の単語に拡張したい場合は、配列を使用できます。の「配列パラメータ」を参照してくださいzshparam(1)
。