【问题标题】:How to extract the value 2 from b="a=2" and assign it to variable a in Bash如何从 b="a=2" 中提取值 2 并将其分配给 Bash 中的变量 a
【发布时间】:2012-01-11 07:19:22
【问题描述】:

只是一个愚蠢的问题。提供代码sn -p

b="a=2"

如何提取值 2 并将其分配给变量 a

【问题讨论】:

  • 嗯?你想要一个 bash 脚本来做这件事,还是一个编译的程序?
  • 仅限 Bash。你有什么想法

标签: linux bash


【解决方案1】:

你可以只评估代码..

eval $b

【讨论】:

  • 直到有人这样做b="rm -rf /;a=2"。俗话说如果 eval 是答案,那你问错问题了
  • @SergeX - 非常正确,但如果它不是使用参数的字段(受信任),则不是问题。
【解决方案2】:

我以提供ugly 解决方案而闻名,所以我不会让你失望 -

[jaypal:~/Temp] a=$(awk '{print $(NF-1)}' FS='["=]' <<< 'b="a=2"')
[jaypal:~/Temp] echo $a
2

intense解决方案

[jaypal:~/Temp] a=$(awk -F= '{print $NF}' <<< $b)
[jaypal:~/Temp] echo $a
2

【讨论】:

  • 您可能会让您的公关人员将您的作品重新命名为强烈和便携,而不是丑陋。 :-)
  • +1 表示 强烈和便携 答案;)虽然如果您对FS 使用单引号,您可以使其稍微不那么强烈,这样您就不必逃避双引号并在末尾设置FS,这样你就不需要-va=$(awk '{print $(NF-1)}' FS='["=]' &lt;&lt;&lt; 'b="a=2"';)
  • 感谢@SiegeX .. 更新了答案...对于胆小的人来说,还有一个less intense 解决方案。我正在运行 20 个解决方案,获得 28 个赞成票,no接受答案。我想知道为什么? :)
【解决方案3】:
a=${b#a=}

$b的值,去掉前导文字a=;将剩下的 (2) 分配给 a

【讨论】:

    【解决方案4】:
    $ b="a=2"
    $ var=${b##*=}; echo $var
    2
    

    【讨论】:

    • 他希望他的变量名为a,而不是var :)
    • @JonathanLeffler 我迫不及待地想在我达到 100K 代表时获得水晶球特权 =)
    • @SiegeX 或者你和我可以联合起来反对 Jon 迄今为止的每一个答案,并将他的票数降到 10 万以下:P
    【解决方案5】:

    如果你正在寻找一个 shell 实用程序来做类似的事情,你可以使用 cut 命令。

    举个例子,试试:

    回显“abcdefg”|切-c3-5

    其中 -cN-M 告诉 cut 命令返回列 N 到 M,包括在内。

    参考: What linux shell command returns a part of a string?Extract substring in Bash

    【讨论】:

    • 使用cut 是一种繁重的方法,因为shell 具有可以执行此操作的内置功能。使用bash 并仍在使用cut,您可以使用a=$(cut -c3 &lt;&lt;&lt; $b) 节省管道。有关其他方法,请参阅其他答案。
    • 你也可以看看这个..我用谷歌搜索了ask.metafilter.com/80862/how-split-a-string-in-bash
    【解决方案6】:

    另一种便携式解决方案

    IFS='='
    set -- $b
    let "$1=$2"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-30
      • 1970-01-01
      • 2014-03-16
      • 1970-01-01
      • 1970-01-01
      • 2020-04-15
      • 1970-01-01
      相关资源
      最近更新 更多