【问题标题】:How to dereference a variable in CSH如何取消引用 CSH 中的变量
【发布时间】:2013-11-28 15:25:16
【问题描述】:

我有一个变量 $var ,它的值作为另一个变量 $env 。 $env 有一些价值。如何使用 $var 打印 $env 的值。

> set xyz = 'abc' set env = 'xyz' set v = '$' set var = "$v""$env"
> 
> echo $var    o/p: $xyz

现在我想使用 $var 打印 $ xyz 的值

【问题讨论】:

    标签: shell variables interpolation csh tcsh


    【解决方案1】:

    使用eval,像这样:

    set xyz='abc'
    set var='xyz'
    eval echo \$$var
    

    这通常被称为间接引用


    这是一个示例脚本:

    set var = 'xyz'
    set xyz = 'abc'
    if ( $?var ) then
        echo '$var is set to '"$var"
    endif
    if ( $?xyz ) then
        echo '$xyz is set to '"$xyz"
    endif
    if ( `eval echo \$\?$var` ) then
        echo '$$var is set to '`eval echo \$$var`
    endif
    

    输出:

    > csh test
    $var is set to xyz
    $xyz is set to abc
    $$var is set to abc
    

    【讨论】:

    • 不幸的是,这个解决方案不起作用:( O/p : 11208var: Command not found
    • 重置您的外壳并编辑您的问题,以准确地向我展示您尝试过的步骤。您之前尝试的人工制品可能会影响您的案例。
    • 当我使用 Csh 时,上述解决方案将适用于 Bash。
    • 我已经使用csh 和几乎 csh 5 年多了,因为我的公司的所有基础设施都基于它。我在csh 上测试了上述内容。我做了which csh 以确保csh 也没有映射到tcsh 或其他东西。
    • 抱歉,更正。您还需要在 ? 上加上反斜杠。试试if ( `eval echo \$\?$var` )
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-19
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    • 2015-03-09
    • 2021-06-13
    • 1970-01-01
    相关资源
    最近更新 更多