首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将一个变量传递给ascii艺术

将一个变量传递给ascii艺术
EN

Stack Overflow用户
提问于 2016-09-29 19:51:52
回答 4查看 533关注 0票数 1

在巴什/乌本图,

如果有一个ASCII艺术文件:"ascii- art“在下面

代码语言:javascript
复制
 |__   __|  ____|/ ____|__   __|
    | |  | |__  | (___    | |   
    | |  |  __|  \___ \   | |   
    | |  | |____ ____) |  | |   
    |_|  |______|_____/   |_|   Client ${CLIENT_ID}

我们每次调用它时,是否都要将变量"${CLIENT_ID}“传递给ascii-art?

我们现在称之为:

代码语言:javascript
复制
cat ascii-art

下列方法不起作用

代码语言:javascript
复制
1.  cat ascii-art | CLIENT_ID="1"

  1. 在文件"ascii-art“的第一行中再添加一行。

。command_line_parse.sh -c ${CLIENT_ID} |___/ |_|客户端${CLIENT_ID}

然后

代码语言:javascript
复制
cat ascii-art | CLIENT_ID="1"

有什么大师能启发我们吗?谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-09-29 20:10:05

首先:看看程序figlettoiletcowasy。这些可能已经完成了您想要的实现。

如果你想自己写的话:

代码语言:javascript
复制
sed 's/${CLIENT_ID}/42/g' ascii-art
票数 0
EN

Stack Overflow用户

发布于 2016-09-29 21:41:46

envsubst工具正是为此目的编写的:

代码语言:javascript
复制
CLIENT_ID=foo envsubst ascii-art

这是一个比sed更好的工具,它限制了可能值的范围(如果您的id中有一个/,或者更糟糕的是分号后面跟着另一个sed命令,那么可能会出现严重的bug)。

还请参阅Wooledge wiki上的TemplateFiles,它包括一个本机bash实现,用于没有gettext (包括envsubst)的系统。

票数 2
EN

Stack Overflow用户

发布于 2016-09-29 20:34:25

下面计算文件内容的echo命令:

代码语言:javascript
复制
CLIENT_ID=1000 eval "$(cat <<EOC
echo -e "$(<ascii-art)"
EOC
)"
  • CLIENT_ID=1000eval命令分配环境变量
  • eval接受这里的文档作为它的单个参数
  • $(<ascii-art),在Bash中,做的和$(cat ascii-art)一样

关于可怕的eval的编辑

确实,我们应该避免使用eval。但是,我们也应该理解命令的目的,并在适当的时候使用它。我们应该了解安全风险,并决定是否应该在某些情况下使用eval

攻击黑客Wiki很好地描述了eval

也许最简单的方法是使用与从脚本运行bash -c "bash code…"相同的方式工作,除非在eval的情况下,给定的代码是在当前的shell环境中执行的,而不是在子进程中执行。

所以eval只执行我们传递的shell代码。我们多久从Bash脚本执行外部命令?我想,很经常。这些命令只是可信任的可执行文件,很可能是Bash脚本本身。

那为什么要害怕评估一些echo "trusted content"呢?

在某些情况下使用eval是否安全取决于用户(OP)。然而,这个答案无疑给了他一个选择,这是一个替代的解决方案。所以我不明白为什么对这个答案投反对票。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39778850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档