在unix变量中设置具有特殊字符的字符串

时间:2018-06-06 13:29:33

标签: bash shell unix

我需要在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

1 个答案:

答案 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被解释为变量(您尚未设置),因此被替换为值(空/无)。因此,t1t2设置为值Her<nothing> - &gt; Her

在第三种情况下,我们使用单引号告诉shell“请不要插值;我的意思是严格意思”。因此,t3设置为您键入的字符串。

在最后一种情况下,我们使用subshel​​l运算符($( ... ))将变量t4设置为subshel​​l命令的输出。在这种情况下,我们使用双引号来确保捕获整个输出,但由于我们没有键入变量$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)