gpt4 book ai didi

bash - 在 bash 中重用字符串

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

我有一个全局变量

RT="\e[m"
TITLE="${FG}%s${RT}"

有两个功能

function one
{
local FG="\e[33m"
printf "$TITLE" "One"
}

function two
{
local FG="\e[32m"
printf "$TITLE" "Two"
}

但是颜色没变,如何重用$TITLE变量

最佳答案

简短的回答:你不能,bash 没有指针的等价物。变量 $TITLE 被分配了赋值字符的 rhs 扩展,因此 $TITLE 的值为 %s\e[m因为 $FG 在扩展时没有定义,因此扩展为空字符串。作为解决方法,您可以改为:

rt=$'\e[m'
title="%s%s$rt"

one() {
local fg=$'\e[33m'
printf "$title" "$fg" "One"
}

two() {
local fg=$'\e[32m'
printf "$title" "$fg" "Two"
}

并且使用 eval 并不是一个好的选择,因为 eval 是邪恶的!

我还从您的脚本中修改了一些内容:

  • 使用小写变量名(因为使用大写变量名在 bash 中被认为是不好的做法),
  • 使用 $'...' 获得正确的颜色(而不是字符串 "\e[m", ...),
  • 使用正确的方式在 bash 中定义函数(没有关键字 function)。

编辑。从您的评论中,我看到您对每次都必须键入 "$fg" 感到非常困扰。所以这是另一种可能性:不是定义变量 $title,而是定义一个函数 title 来回显格式化字符串并像这样使用它:

rt=$'\e[m'

title() {
echo "$fg%s$rt"
}

one() {
local fg=$'\e[33m'
printf "$(title)" "One"
}

two() {
local fg=$'\e[32m'
printf "$(title)" "Two"
}

每次您调用函数标题时,它都会回显您需要的格式字符串,因此 $(title) 将扩展为该格式字符串。每次调用函数 title 时,字符串 "$fg%s$rt" 都会被展开,变量 $fg$rt 在这个扩展时间有。

关于bash - 在 bash 中重用字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13649299/

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