zshで変数を拡張する

zshで変数を拡張する

以下のスクリプトはbashでは機能しますが、zshでは機能しません。私はこれが変数内でOPTS変数を「拡張」(正しい単語かどうかわからない)していて、この構文が$EXCLUDEzshでは機能しないためだと思います。 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コマンドラインで複数のパラメータに区別されないことですrsynczsh構文では、次を使用します。

rsync ${=OPTS} $SRC $DST 

(代替は、オプションを使用してグローバルに標準シェル動作をエミュレートすることです-o shwordsplit...)

マンページから:

[in]の一般的な違いzshは、コマンドラインで置き換えられた変数が単語に分割されないことです。SH_WORD_SPLIT「パラメータ拡張」セクションのシェルオプションの説明を参照してくださいzshexpn(1)。では、zsh明示的に分割を要求したり(たとえば${=foo})、変数を複数の単語に拡張したい場合は、配列を使用できます。の「配列パラメータ」を参照してください zshparam(1)

おすすめ記事