我需要在unix变量中存储一个可以包含特殊字符的字符串。
在我的情况下,我正在解密我需要存储的她的$ p7 的文字。显然,结果可以是任何字符串(例如 i * Fi + K' 7 )。
他们是否知道如何保存我投入变量的结果并像这样使用它
VAR = 她$ P7
echo var
以身作则?
我用它来检索字符串
echo "`${FDL_HOME}/bin/cypher2 DEC ${CF_KEYPFX} ${CF_KEYLEN} ${CF_PASS}== | grep "decrypt text" | gawk -F': ' '{print $2}'`"|perl -e print
答案 0 :(得分:1)
语法是正确的,如果不健壮的话,问题在于理解字符串插值。在标准字符串上下文中,美元符号表示它将要解释变量。通常,这意味着用变量的值替换变量。考虑:
$ t1=Her$p7
$ t2="Her$p7"
$ t3='Her$p7'
$ t4="$(echo 'Her$p7')"
$ echo "t1: $t1; t2: $t2; t3: $t3, t4: $t4"
t1: Her; t2: Her; t3: Her$p7; t4: Her$p7
请注意,在设置t1
(第一行)和t2
时,$p7
被解释为变量(您尚未设置),因此被替换为值(空/无)。因此,t1
和t2
设置为值Her<nothing>
- &gt; Her
。
在第三种情况下,我们使用单引号告诉shell“请不要插值;我的意思是严格意思”。因此,t3
设置为您键入的字符串。
在最后一种情况下,我们使用subshell运算符($( ... )
)将变量t4
设置为subshell命令的输出。在这种情况下,我们使用双引号来确保捕获整个输出,但由于我们没有键入变量$p7
,因此shell不会插入命令的输出。
所以,你应该选择以下的方式:
$ yourVar=$(echo "`${FDL_HOME}/bin/cypher2 DEC ${CF_KEYPFX} ${CF_KEYLEN} ${CF_PASS}== | grep "decrypt text" | gawk -F': ' '{print $2}'`" | perl -e print)
进入过去十年,我们可以通过而不是使用反引号进行子shell操作来稍微清理一下:
$ yourVar=$(echo "$(${FDL_HOME}/bin/cypher2 DEC ${CF_KEYPFX} ${CF_KEYLEN} ${CF_PASS}== | grep "decrypt text" | gawk -F': ' '{print $2}')" | perl -e print)