Shell-Script

在 exec 命令中通過變數指定重定向選項

  • September 20, 2019

我希望能夠通過變數指定重定向命令/選項(我可能會根據某些條件等設置)。但是當我執行這個 bash 腳本時:

REDIRECT=">>test"
exec echo hi ${REDIRECT}

我得到(通過 bash -x 輸出):

+ REDIRECT='>>test'
+ exec echo hi '>>test'
hi >>test

看起來 exec 將 REDIRECT 變數的值放在單引號內,而不是從字面上替換它的值。

我該如何解決/解決這個問題?

為了避免使用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"

我認為這樣做的唯一方法是使用eval並且所有經典的警告eval將適用。也就是說,您可以執行以下操作:

REDIRECT=">>test"
eval echo hi ${REDIRECT}

引用自:https://unix.stackexchange.com/questions/298426