簡體   English   中英

在awk中的環境變量中引用ANSI轉義序列

[英]Referencing ANSI escape sequences in environment variables within awk

我正在共享一個源文件,為不同的顏色定義了不同的ANSI轉義碼。 這些代碼來自shellscript(bash),該腳本也啟動了awk腳本,而envvars在awk中被引用。

但是我沒有得到想要的輸出-即顏色。

bash中的示例:

export Red='\033[0;31m'
export Color_Off='\033[0m'

  # This works, Output is "Hello" in Red
echo $Red Hello $Color_Off

awk中的示例(仍然導出/設置envvar):

  # This does not
$ awk 'BEGIN { print "Output: " ENVIRON["Red"] "Hello" ENVIRON["Color_Off"] }'
Output: \033[0;31mHello\033[0m

  # This works, Output is "Hello" in Red
awk 'BEGIN { R="\033[0;31m" ; O="\033[0m" ; print R "Hello" O }'

我以為答案就在我眼前,但是我暫時找不到。

請改用以下awk命令(從您的命令稍作修改):

$ awk -v R=$Red -v O=$Color_Off 'BEGIN { print R "Hello" O }'

有一種方法可以實現,但是您需要聲明顏色轉義序列略有不同。 使用ANSI C引號直接插入轉義序列,而不是使用以轉義為首的字符串,並讓外殼稍后擴展:

export Red=$'\e[0;31m'
export Color_Off=$'\e[0m'
awk 'BEGIN { print "Output: " ENVIRON["Red"] "Hello" ENVIRON["Color_Off"] " Bye" }'

這應該按預期工作。 我還相信這是聲明顏色的上乘方式(例如,在Zsh的colors contrib function中以這種方式完成)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM