コマンドとパラメータを分割してbashスクリプトの変数に入れます。

コマンドとパラメータを分割してbashスクリプトの変数に入れます。

grep同じ(非常に長い)コマンドを複数回繰り返すスクリプトがあります。行の長さを短くしてスクリプトを読みやすくしたいので、命令の一部を変数に入れました。

次の行は次のとおりです(他のパラメータを使用してスクリプトで複数回繰り返されます)。

rsync -av --delete -R --exclude=alternatives /etc/ /backup.raw/ | grep -E '^deleting|[^/]$' >> /var/log/rsync.log

その行はうまくいきます。私はそれを次のように短縮してみました。

_rscmd='rsync -av --delete -R'
_mn=/backup.raw/
_grep='grep -E "^deleting|[^/]$"'
_rslog=/var/log/rsync.log

したがって、「最後の」行は次のようになります。

$_rscmd --exclude=alternatives /etc/ $_mn | $_grep >> $_rslog

しかし、その行は$_grep変数で失敗します。どうすれば正しく書くことができますか?私は成功"…"しませ'…'んでした。 grepコマンドはもともと機能しました。

ベストアンサー1

変数を使用している場合は、複数の部分(コマンドとパラメータ)に分割することは機能しません。この例の場合eval:

eval $_rscmd --exclude=alternatives /etc/ $_mn | eval $_grep >> "$_rslog"

一般的に使用するのが最善です。シェル機能またはニックネーム 変数を使用するよりも:

alias my_grep='grep -E "^deleting|[^/]$"'
...
... | my_grep >> "$_rslog"

おすすめ記事