How to extract the value 2 from b=“a=2” and assign it to variable a in Bash
只是一个愚蠢的问题。 提供代码段
如何提取值2并将其赋值给变量a
-
咦? 你想要一个bash脚本来做这个,还是一个已编译的程序?
-
只是Bash。 你有什么主意吗
我以提供ugly解决方案而闻名,所以我不会让你失望 -
1 2 3
| [jaypal:~/Temp] a=$(awk '{print $(NF-1)}' FS='["=]' <<< 'b="a=2"')
[jaypal:~/Temp] echo $a
2 |
少intense解决方案
1 2 3
| [jaypal:~/Temp] a=$(awk -F= '{print $NF}' <<< $b)
[jaypal:~/Temp] echo $a
2 |
-
你可能会让你的P.R.人将你的作品重新塑造为强烈和便携而不是丑陋。 :-)
-
大声笑!!正好注意到先生!!
-
+1是一个强烈和便携的答案;)虽然如果你使用FS的单引号你可以使它稍微不那么强烈,所以你不必逃避双引号并在最后设置FS所以你不要不需要-v a=$(awk '{print $(NF-1)}' FS='["=]' <<< 'b="a=2"';)
-
谢谢@SiegeX ..更新了答案......对于胆小的人来说,也有一个less intense解决方案。我正在进行20次解决方案,获得28次投票,没有接受答案。我想知道为什么? :)
你可以只是评估代码..
-
+1:非常整洁 - 一旦指出就很明显。
-
直到有人b="rm -rf /;a=2"。俗话说,如果eval是答案,你就会问错误的问题
-
@SergeX - 非常正确,但如果它不是(受信任的)使用参数的字段,则不是问题。
1 2 3
| $ b="a=2"
$ var=${b##*=}; echo $var
2 |
-
他想要他的变量名为a,而不是var :)
-
无论如何,thx :-)
-
@JonathanLeffler我不能等到达到100K rep =时才得到水晶球
-
@SiegeX或者你和我可以结合力量并向Jon的每个答案投票直到约会并将他带到100k以下:P
取$b的值,删除前导文本a=; 将剩下的内容(2)分配给a。
另一种便携式方案
1 2 3
| IFS='='
set -- $b
let"$1=$2" |
如果您正在寻找shell实用程序来执行类似的操作,则可以使用cut命令。
举个例子,试试:
echo"abcdefg"| 切-c3-5
其中-cN-M告诉cut命令返回N到M列,包括N和M.
REF:
什么linux shell命令返回字符串的一部分?
和
在Bash中提取子字符串
-
还有很多其他的方式..
-
使用cut是一种重要的方法,因为shell具有可以执行此操作的内置功能。使用bash并仍然使用cut,您可以使用a=$(cut -c3 <<< $b)保存管道。有关其他方法,请参阅其他答案。
-
你也可以查看..我googled ask.metafilter.com/80862/how-split-a-string-in-bash
-
它正在工作,谢谢!