gpt4 book ai didi

Bash 脚本打印变量中包含的转义序列

转载 作者:行者123 更新时间:2023-11-29 09:00:48 25 4
gpt4 key购买 nike

代码:

yellow="\e[1;33m"
chosen_colour="${yellow}"
declare -i score=300
printf '%s %d\n' "${chosen_colour}" "${score}"

结果:

\e[1;33m 300

应该是:

300 /* in yellow */

如何在不使用这些语法的情况下将包含 ANSI 转义序列的字符串值插入到 printf 语句中:

避免 1:(实际上可行,但在执行大量 += 时会造成浪费)

s="${yellow}"
s+="${score}"
s+=...
s+=...
s+=...
s+=...
s+=...
s+=...
s+=...
s+=...

避免 2:(在我的情况下很难做到,因为需要这种构造的变量数量太多)

printf "${yellow}${score}${a1}${a2}${a3}${a4}${a5}${a6}${a7}${a8}........."

我希望能够根据预定义的 FORMAT 字符串传递要替换的值,使用 printf 调用的 arguments 部分,就像我天真地做的那样在第一个例子中。

我可以忍受这样的事情:

printf \
'%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s...' \
"${a1}" \
"${a2}" \
"${a3}" \
"${a4}" \
"${a5}" \
"${a6}" \
...

虽然最终,对于我的许多变量,我会使用这样的结构:

${!a*} # or similar

最佳答案

你这样做:

printf "^[%s foo" "${a1}" # that is ctrl+v, ESC, followed by %s

或:

printf "\033%s foo" "${a1}"  # 033 octal for ESC

关于Bash 脚本打印变量中包含的转义序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15149151/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com