如何解决在Bash中将自定义变量写入带引号的变量
如何将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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。