数组 – 评估命令的颜色格式化输出
发布时间: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>的值中. 包含在一个功能中: 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”建议清除整个屏幕. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
