617355557 2017-04-06 09:11 采纳率: 0%
浏览 887

CentOS7变量直接使用的问题

$ declare tmp //声明tmp变量
$ tmp=ls//我把ls赋值给tmp
$ $tmp//直接使用tmp。然而得到的结果和ls似乎有点不太一样
图片说明
就是颜色问题。
为什么$ $tmp显示出来的结果文件夹不会变色

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-05 16:44
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在Linux中,$ 符号用于指向一个命令的输出。当你在脚本或shell交互中使用 $ 符号时,它实际上是调用了 eval 命令,并将命令的输出作为参数传递给它。这可能导致你看到与实际执行命令不同的输出。

    例如,在你的例子中:

    $ declare tmp
    

    在这个情况下,tmp 变量被声明为可读写的(w)。然后我们试图通过 $ 指针来访问这个变量,但实际上它指向的是当前 shell 的环境变量。因此,当你尝试通过 $ 指针引用 tmp 时,实际上是在尝试访问 shell 环境中的临时变量。

    要解决这个问题,你可以手动创建一个临时变量并将其赋值给你想要的操作,而不是通过 $ 指针。这样可以避免任何潜在的环境变量污染问题。以下是修复后的示例:

    # 创建一个临时变量
    local tmp_var=$(ls)
    
    # 使用临时变量
    echo $tmp_var
    
    # 输出应该反映原始 ls 命令的结果
    

    这样做的好处是,即使 ls 被更改为其他命令,也不会影响到 tmp_var 的内容,因为它是临时变量,每次运行脚本都会重新生成一个新的 tmp_var

    评论

报告相同问题?