bashコマンドの分割でエラーが発生する

bashコマンドの分割でエラーが発生する

rclone用のbashスクリプトの生成に問題があります。

これによりエラーが発生します。

20d: command not found


DAYS='20d'
PURGE='purge --min-age' ${DAYS}
rclone ${PURGE} ${DEST}/old/ $VERBOSE $LOGS

これは効果があります

PURGE='purge --min-age 20d'
rclone ${PURGE} ${DEST}/old/ $VERBOSE $LOGS

最初のものを使用できるように誰かが私を助けることができますか? DAYSだけを変更すると、他の人がこのスクリプトを使用する方が簡単になります。

ベストアンサー1

PURGE変数への参照が原因でこの問題が発生します。

現在、以下を設定しています。

PURGE='purge --min-age'

それから実装する ${DAYS}(20d)PURGE環境の変数。

次のことができます。

purge=(purge --min-age "$days")

(配列は、引用されていない変数よりもコマンドライン引数を保持するより安全な方法です。)

次のように呼び出すことができます。

rclone "${purge[@]}" "${dest}/old" "$verbose" "$logs"

注:環境変数には大文字の変数名のみを使用できます。


たとえば、

$ FOO=bar env | grep FOO
FOO=bar
$ env | grep FOO
$

FOO変数をに設定し、barそのenv環境でその変数を使用してコマンドを実行します。

20d有効なコマンドではないため、エラーが発生します。

おすすめ記事