将自定义变量写入 Bash 中的引用变量

Writing custom variable into quoted variable in Bash

如何将 bash 变量写入引用变量? 例如;

x = '$RES'

当我回应这个时,它 returns $RES,但下面的代码以 1 结尾(错误)

test "$x" = "$RES" ; echo $?;

上面的命令在成功时应该 return 0。这有什么问题吗?

感谢您的快速回复,


编辑:

    # this script is running with the rights of other user.(sudo)
    # Usage: ./test.sh [password]

    RES=$(cat .secret) # i have no read access right.

    if [ ! -v "" ]; then
       echo "Bad Luck! You are evil.."
       exit 1
    fi


    if test "" = "$RES" ; then
       echo "OK : $RES"
    else
       echo "Repeat it.."
    fi

export x=RES

export RES=RES # i tried it in anyway like RES='$RES' and so on.

./test.sh $x

当我调用带有参数(例如 x)的 bash 脚本并通过 x=$RES 声明它时,它仍然没有绕过等式。

要将值从一个变量复制到另一个变量,请使用正常赋值:

x=$RES
test "$x" = "$RES" && echo Same

双引号展开变量,所以"$RES"对应变量内容$RES。如果它不包含字符串 $RES,则值不相等。

单引号不展开变量:

test "$x" = '$RES'

或者,反斜杠美元符号:

test "$x" = $RES
test "$x" = "$RES"

不存在 引用变量

听从您的指挥

test "$x" = "$RES" 

x 在您的示例中具有值 $RES(即由 4 个字符组成)。

在 right-hand 端,您使用双引号插入变量的值(在本例中为变量 RES)。您没有说 RES 包含什么值,但除非您明确设置

RES='$RES'

他们将与 not-equal 进行比较。要与相等性进行比较,您必须将 xstring $RES 进行比较,而不是与变量 [=16] 的内容进行比较=].您可以使用

test $x = '$RES' # single quotes prevent interpolation

test $x = $RES # backslash escapes interpolation