変数(特定の条件などに応じて設定できます)でリダイレクトコマンド/オプションを指定できるようにしたいです。しかし、このbashスクリプトを実行すると、次のようになります。
REDIRECT=">>test"
exec echo hi ${REDIRECT}
私は次のようになります(bash -xを介して出力):
+ REDIRECT='>>test'
+ exec echo hi '>>test'
hi >>test
execがREDIRECT変数の値を文字通り置き換えるのではなく、単一引用符の中に入れるようです。
この問題をどのように解決/解決できますか?
ベストアンサー1
使用を避けるにはeval
:
opt_file=""
# Command line parsing bit here, setting opt_file to a
# file name given by the user, or leaving it empty.
if [[ -z "$opt_file" ]]; then
outfile="/dev/stdout"
else
outfile="$opt_file"
fi
exec echo hi >>"$outfile"
同じことを行う少し短いバリエーションです。
# (code that sets $opt_out to a filename, or not,
# and then...)
outfile=${opt_file:-/dev/stdout}
exec echo hi >>"$outfile"