首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >是否可能有一个变量来动态计算bash中的命令?

是否可能有一个变量来动态计算bash中的命令?
EN

Stack Overflow用户
提问于 2018-09-20 01:13:10
回答 1查看 0关注 0票数 0

基本上,我想要的是拥有一个包含例如的变量$(some-command),以便它some-command在扩展时提供结果。

一个例子将有助于澄清我的意思。

假设我有一些命令tell-svn-root打印到stdout包含子目录的当前目录的最新(即最深)祖先的路径.svn

我想创建一个SVNROOT总是计算输出的变量tell-svn-root

SVNROOT=$(tell-svn-root)in .bashrc将无法工作,因为那时SVNROOT将有一个固定值(即运行tell-svn-root时的输出.bashrc)。

例如运行的函数cd $(tell-svn-root)也不够,因为我想编写像这样的命令cd $SVNROOT/my-app-src

我知道我可以这么做$(tell-svn-root)/my-app-src,但输入那些额外的括号确实会减慢一些因为它涉及键盘的数字行上的两个字符而不是一个。

我找不到一个好的答案,所以我怀疑这可能是不可能的。

EN

回答 1

Stack Overflow用户

发布于 2018-09-20 10:30:17

你是对的:准确地给定(在请求特定变量的值时触发代码),请求是不可能的。

也就是说,有一些解决方法; 例如,您可以在每次打印提示时(或者在每个命令之前,如果您要实现DEBUG陷阱)运行一个函数,该函数会在此时更新您的变量。

显然,性能影响可能是非常重要的,我强烈建议函数调用中涉及额外的冗长; 特别是在处理不受信任数据的安全做法通常非常冗长的情况下,bash不是那些被迷恋的人所使用的安全语言。

代码语言:javascript
复制
update_variables() {
  if [[ $svnroot_for_PWD != "$PWD" ]]; then
    svnroot=$(tell-svn-root)
    svnroot_for_PWD=$PWD
  fi
}
PROMPT_COMMAND=update_variables

关于变量命名约定 - 全部大写名称保留给对shell和其他POSIX定义的工具有意义的变量,而小写名称保证可由用户定义的代码安全使用。请参阅http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html上的相关规范,请记住环境和shell变量共享相同的命名空间。

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

https://stackoverflow.com/questions/-100006143

复制
相关文章

相似问题

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