【发布时间】:2012-01-11 07:19:22
【问题描述】:
只是一个愚蠢的问题。提供代码sn -p
b="a=2"
如何提取值 2 并将其分配给变量 a
【问题讨论】:
-
嗯?你想要一个 bash 脚本来做这件事,还是一个编译的程序?
-
仅限 Bash。你有什么想法
只是一个愚蠢的问题。提供代码sn -p
b="a=2"
如何提取值 2 并将其分配给变量 a
【问题讨论】:
你可以只评估代码..
eval $b
【讨论】:
b="rm -rf /;a=2"。俗话说如果 eval 是答案,那你问错问题了
我以提供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
【讨论】:
FS 使用单引号,您可以使其稍微不那么强烈,这样您就不必逃避双引号并在末尾设置FS,这样你就不需要-va=$(awk '{print $(NF-1)}' FS='["=]' <<< 'b="a=2"';)
less intense 解决方案。我正在运行 20 个解决方案,获得 28 个赞成票,no接受答案。我想知道为什么? :)
a=${b#a=}
取$b的值,去掉前导文字a=;将剩下的 (2) 分配给 a。
【讨论】:
$ b="a=2"
$ var=${b##*=}; echo $var
2
【讨论】:
a,而不是var :)
如果你正在寻找一个 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 <<< $b) 节省管道。有关其他方法,请参阅其他答案。
另一种便携式解决方案
IFS='='
set -- $b
let "$1=$2"
【讨论】: