代码之家  ›  专栏  ›  技术社区  ›  alejomarchan

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

  •  0
  • alejomarchan  · 技术社区  · 6 年前

    我需要在unix变量中存储一个可以包含特殊字符的字符串。

    在我的例子中,我正在解密返回给我的文本 她的P7美元 我需要储存。显然,结果可以是任何字符串(例如 I*Fi+K'7 )

    他们知道我如何保存我抛出的变量的结果并像这样使用它吗

    var= 她的P7美元

    回声var

    举个例子?

    我用这个来检索字符串

    echo "`${FDL_HOME}/bin/cypher2 DEC ${CF_KEYPFX} ${CF_KEYLEN} ${CF_PASS}== | grep "decrypt text" | gawk -F': ' '{print $2}'`"|perl -e print
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   hunteke    6 年前

    语法是正确的,如果不是健壮的,问题在于理解字符串插值。在标准字符串上下文中,美元符号表示shell将要解释变量。通常,这意味着用变量的值替换变量。考虑:

    $ 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)
    

    进入过去十年,我们可以通过 使用backticks进行子shell操作:

    $ yourVar=$(echo "$(${FDL_HOME}/bin/cypher2 DEC ${CF_KEYPFX} ${CF_KEYLEN} ${CF_PASS}== | grep "decrypt text" | gawk -F': ' '{print $2}')" | perl -e print)