加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

数组 – 评估命令的颜色格式化输出

发布时间:2020-12-16 01:58:43 所属栏目:安全 来源:网络整理
导读:我使用diff来格式化包含tput颜色变量的字符串,并且无法在不使用“evil”eval的情况下评估这些变量 命令. 创建字符串的命令: output1="$(diff --changed-group-format="${RED}%=${CLS}" (echo -e "${nstr1}") (echo -e "${nstr2}")|tr -d 'n')" 并输出:
我使用diff来格式化包含tput颜色变量的字符串,并且无法在不使用“evil”eval的情况下评估这些变量
命令.

创建字符串的命令:

output1="$(diff --changed-group-format="${RED}%=${CLS}" <(echo -e "${nstr1}") <(echo -e "${nstr2}")|tr -d 'n')"

并输出:

[String n${RED}a${CLS}m${RED}è?${CLS}]

我查看并搜索了其他答案,但除了:

eval echo "${output1}"

根据我的阅读,我的3个选项是eval(坏),间接扩展(更好)和数组(最好).每一次间接尝试都失败了.我很想使用数组选项,但我只是没有看到它将如何应用于此.我错过了什么吗?

我不认为它是相关的,但变量和发送到diff的字符串的构造是另一个问题here.

解决方法

如果您愿意使用有限的,已知的预先设置的颜色代码集,则可以使用Bash参数扩展:

#!/usr/bin/env bash

# Define the variables containing ANSI color sequences.
RED="$(tput setaf 1)"
CYA="$(tput setaf 6)"
CLS="$(tput sgr0)"

# Sample input string
str='[String n${RED}a?${CLS}m${CYA}e??${CLS}]'

# Replace the placeholders with their corresponding variable values.
str=${str//'${RED}'/${RED}}
str=${str//'${CYA}'/${CYA}}
str=${str//'${CLS}'/${CLS}}

# Output the result.
echo "$str"

这种方法利用了Bash参数扩展中使用的参数本身需要扩展的事实,除非单引号:

> ${< varName> //< search> /< replace>}替换< search>的所有实例与< replace>在变量< varName>的值中.
例如,>’${RED}’ – 由于单引号 – 被视为文字搜索词.
> ${RED},例如 – 由于未加引号 – 在被用作替换术语之前被扩展,因此有效地用文件${RED}的值替换文字${RED}.

包含在一个功能中:

printColored() {
  local str=$1
  local RED="$(tput setaf 1)" CYA="$(tput setaf 6)" CLS="$(tput sgr0)"
  str=${str//'${RED}'/${RED}}
  str=${str//'${CYA}'/${CYA}}
  str=${str//'${CLS}'/${CLS}}
  printf '%sn' "$str"
}

printColored '[String n${RED}a?${CLS}m${CYA}e??${CLS}]'

顺便说一句,我将${CLS}重命名为${RST}(用于“重置”)或类似的东西,因为术语“cls”建议清除整个屏幕.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读