Bash

如何將’>&2’儲存在變數中

  • October 28, 2021

類似的問題,但沒有答案:我們如何執行儲存在變數中的命令?

如何在 bash 腳本中執行以下操作?

error=">&2"
echo 'something went wrong' $error

代替

echo 'something went wrong' >&2

為什麼?

因為如果您像這樣拼寫錯誤>2&,它會正常工作,但會將錯誤消息寫入名為2.

就像他們在評論中說的那樣,你真的沒有。

好吧,您可以使用 來做到這一點,但是在該命令行上eval引用/轉義其他所有內容時會遇到麻煩。

不過,您可以使用函式做一些事情:在重定向下執行給定的簡單命令;或者只是向 stderr 寫一條消息:

#!/bin/bash
tostderr() {
       "$@" >&2
}

warn() {
       local IFS=" "
       printf "%s\n" "$*" >&2
}

tostderr printf "warning: %s\n" "something happened"

warn another thing to warn about

強調第一個簡單的命令,它不是eval,你不能在命令中使用 shell 語法。例如,tostderr foo | bar它重定向just的輸出foo(通過管道到stderr),並且tostderr (foo | bar)不會工作。


如果你在 zsh 上,並且真的想這樣做,你可以使用全域別名來添加重定向(但有些人可能認為這接近於混淆編碼):

#/usr/bin/zsh

alias -g TOSTDERR='>&2'
echo something bad happened TOSTDERR

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