将自定义变量写入 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 进行比较。要与相等性进行比较,您必须将 x
与 string $RES 进行比较,而不是与变量 [=16] 的内容进行比较=].您可以使用
test $x = '$RES' # single quotes prevent interpolation
或
test $x = $RES # backslash escapes interpolation
如何将 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 进行比较。要与相等性进行比较,您必须将 x
与 string $RES 进行比较,而不是与变量 [=16] 的内容进行比较=].您可以使用
test $x = '$RES' # single quotes prevent interpolation
或
test $x = $RES # backslash escapes interpolation