Shell-Script
在 exec 命令中通過變數指定重定向選項
我希望能夠通過變數指定重定向命令/選項(我可能會根據某些條件等設置)。但是當我執行這個 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}