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