问题描述
如何将bash变量写入带引号的变量中? 例如;
x ='$ RES'
当我回显此代码时,它返回$ RES,但是下面的代码以1(错误)结尾
array_contains()
以上命令成功执行时应返回0。怎么了?
编辑:
test "$x" = "$RES" ; echo $?;
# 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 "$1" ]; then
echo "Bad Luck! You are evil.."
exit 1
fi
if test "$1" = "$RES" ; then
echo "OK : $RES"
else
echo "Repeat it.."
fi
当我使用参数x调用bash脚本并通过x = $ RES对其进行声明时,它仍然不会绕过相等性。
解决方法
要将值从一个变量复制到另一个变量,请使用常规分配:
x=$RES
test "$x" = "$RES" && echo Same
双引号可扩展变量,因此"$RES"
对应于变量$RES
的内容。如果它不包含字符串$RES
,则值不相等。
单引号不会扩展变量:
test "$x" = '$RES'
或者,反斜杠美元符号:
test "$x" = \$RES
test "$x" = "\$RES"
,
没有像引用变量这样的东西。
在您的命令中
neuMF
您的示例中的 test "$x" = "$RES"
的值为x
(即由4个字符组成)。
在右侧,您使用的双引号对变量(在这种情况下为变量$RES
)的值进行插值。您没有说RES
包含什么值,但是除非您明确设置了
RES
它们将与不相等进行比较。要与相等性进行比较,您必须将RES='$RES'
与字符串 $ RES 进行比较,而不是与变量x
的内容进行比较。您可以使用
RES
或
test $x = '$RES' # single quotes prevent interpolation