$ {!FOO}和zsh

Profpatsch

${!FOO}在中执行双重替换bash,这意味着它将FOO的(字符串)值用作变量名。
zsh不支持此功能。

有没有一种方法,使这项工作同样在bashzsh

背景:

我有一个环境变量列表,例如

PATH MAIL EDITOR

并要先打印变量名,然后再打印它们的值。

这适用于bash但不适用zsh

for VAR in LIST
do
        echo $VAR
        echo ${!VAR}
done

应该可以通过某种方式实现“旧方法” eval,但我无法使其正常工作:

for VAR in LIST
do
        echo $VAR
        echo `eval \$$VAR`
done

我永远也不会理解为什么我不能简单地进行像${${VAR}}或什至${${${VAR}}}需要这样的任意深度替换,因此对此的解释也将是不错的。

吉勒斯“别再邪恶了”

bash和zsh都有执行间接扩展的方法,但是它们使用不同的语法。

使用eval执行间接扩展非常容易这适用于所有POSIX和大多数Bourne外壳。如果该值包含在外壳程序中具有特殊含义的字符,请务必正确引用。

eval "value=\"\${$VAR}\""
echo "$VAR"
echo "$value"

${${VAR}}不起作用,因为它不是任何Shell都实现的功能。大括号内的内容必须符合不包含的语法规则${VAR}(在zsh中,这是受支持的语法,但是做了一些不同的操作:嵌套替换对相同的值执行连续的转换;${${VAR}}这等效于$VAR因为它对值进行两次身份转换。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

<%= foo%>和$ {foo}之间的区别

来自分类Dev

<%= foo%>和$ {foo}之间的区别

来自分类Dev

使用哪个:foo和foo:

来自分类Dev

如何使用脚本/别名使bash / zsh将某些文本从“ foo.foo.foo”更改为“ foo foo foo”?

来自分类Dev

@ foo,self.foo和foo之间的区别?

来自分类Dev

(?=。* foo \ b)和(?=。* foo)\ b之间的区别

来自分类Dev

“ grep -r foo *”和“ grep -r foo”。

来自分类Dev

“ function foo(){}”和“ foo(){}”之间的区别

来自分类Dev

foo(bar)和foo(bar,baz)

来自分类Dev

在bash和zsh中全部单独使用`> foo.txt`和`<foo.txt`的一般规则是什么?

来自分类Dev

PHP:{$ foo}和$ {foo}之间有区别吗

来自分类Dev

&foo :: function和foo :: function有什么区别?

来自分类Dev

`foo()的yield和foo()中的x的区别:yield x`

来自分类Dev

Bash中的`declare foo`和`foo =`有什么区别?

来自分类Dev

简化kwargs和kwargs ['foo']中的'if'foo'为True:

来自分类Dev

$ foo [bar]和$ foo ['bar']在php中的区别

来自分类Dev

ifeq($ {foo),)和ifndef foo有什么区别

来自分类Dev

$ foo === TRUE和TRUE === $ foo有什么区别

来自分类Dev

js中的“ foo.bar”和“ foo ['bar']”之间的区别

来自分类Dev

my $ foo和my($ foo)有什么区别?

来自分类Dev

var foo = function(){...}()和var foo =(function(){...}())之间的区别

来自分类Dev

git分支“ foo”和“ foo / bar”不起作用吗?

来自分类Dev

别名foo bar和foo = bar之间的区别

来自分类Dev

Session(“ foo”)=“ test”和Cstr(Session(“ foo”)=“ test”之间的区别

来自分类Dev

ifeq($(foo),)和ifndef foo有什么区别

来自分类Dev

使用$ scope.foo和foo.vaue的好处

来自分类Dev

使用params [:foo]和@foo有什么区别?

来自分类Dev

Bash 中的 `declare foo` 和 `foo=` 有什么区别?

来自分类Dev

java中foo(int)和foo(Integer)的区别

Related 相关文章

  1. 1

    <%= foo%>和$ {foo}之间的区别

  2. 2

    <%= foo%>和$ {foo}之间的区别

  3. 3

    使用哪个:foo和foo:

  4. 4

    如何使用脚本/别名使bash / zsh将某些文本从“ foo.foo.foo”更改为“ foo foo foo”?

  5. 5

    @ foo,self.foo和foo之间的区别?

  6. 6

    (?=。* foo \ b)和(?=。* foo)\ b之间的区别

  7. 7

    “ grep -r foo *”和“ grep -r foo”。

  8. 8

    “ function foo(){}”和“ foo(){}”之间的区别

  9. 9

    foo(bar)和foo(bar,baz)

  10. 10

    在bash和zsh中全部单独使用`> foo.txt`和`<foo.txt`的一般规则是什么?

  11. 11

    PHP:{$ foo}和$ {foo}之间有区别吗

  12. 12

    &foo :: function和foo :: function有什么区别?

  13. 13

    `foo()的yield和foo()中的x的区别:yield x`

  14. 14

    Bash中的`declare foo`和`foo =`有什么区别?

  15. 15

    简化kwargs和kwargs ['foo']中的'if'foo'为True:

  16. 16

    $ foo [bar]和$ foo ['bar']在php中的区别

  17. 17

    ifeq($ {foo),)和ifndef foo有什么区别

  18. 18

    $ foo === TRUE和TRUE === $ foo有什么区别

  19. 19

    js中的“ foo.bar”和“ foo ['bar']”之间的区别

  20. 20

    my $ foo和my($ foo)有什么区别?

  21. 21

    var foo = function(){...}()和var foo =(function(){...}())之间的区别

  22. 22

    git分支“ foo”和“ foo / bar”不起作用吗?

  23. 23

    别名foo bar和foo = bar之间的区别

  24. 24

    Session(“ foo”)=“ test”和Cstr(Session(“ foo”)=“ test”之间的区别

  25. 25

    ifeq($(foo),)和ifndef foo有什么区别

  26. 26

    使用$ scope.foo和foo.vaue的好处

  27. 27

    使用params [:foo]和@foo有什么区别?

  28. 28

    Bash 中的 `declare foo` 和 `foo=` 有什么区别?

  29. 29

    java中foo(int)和foo(Integer)的区别

热门标签

归档