2012-01-11 49 views

回答

2
a=${b#a=} 

$b值,去掉前導文本a=;將剩下的(2)分配給a

+0

酷。這是一個優雅的解決方案。 thx – 2012-01-11 07:25:55

1

如果您正在尋找一個shell工具來做類似的事情,您可以使用cut命令。

爲了把你的例子,嘗試:

回聲 「ABCDEFG」 | cut -c3-5

其中-cN-M告訴cut命令返回列N到M(含)。

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

+0

還有很多其他的方法.. – 2012-01-11 07:24:19

+0

使用'cut'是一種強大的方法來做到這一點,因爲殼具有可以做到的內置功能。使用'bash'並仍然使用'cut',可以使用'a = $(cut -c3 <<< $ b)'來保存管道。對於其他方式來做到這一點,請參閱其他答案。 – 2012-01-11 07:28:01

+0

你也可以檢查這個..我google搜索 http://ask.metafilter.com/80862/how-split-a-string-in-bash – 2012-01-11 07:29:51

2
$ b="a=2" 
$ var=${b##*=}; echo $var 
2 
+0

他想要他的變量叫'a',而不是'var' :) – 2012-01-11 07:24:32

+0

無論如何,thx :-) – 2012-01-11 07:27:50

+0

@JonathanLeffler我不能等到我拿到水晶球時纔打我100K rep =) – SiegeX 2012-01-11 07:31:43

3

你可以只EVAL代碼..

eval $b 
+0

+1:非常整齊 - 曾經指出過。 – 2012-01-11 07:34:59

+1

直到有人做'b =「rm -rf /; a = 2」'。正如俗話所說*如果eval是答案,你問錯誤的問題* – SiegeX 2012-01-11 07:39:14

+0

@SergeX - 非常真實,但不是一個問題,如果它不是一個參數用於(可信任)的字段。 – Geoffrey 2012-01-11 07:41:15

3

我蜚聲給ugly的解決方案,所以我不會dissapoint你 -

[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

您可能會讓您的P.R.人員將您的工作重新命名爲*激烈和便攜式*而非醜陋*。 :-) – wallyk 2012-01-11 07:42:32

+0

大聲笑!正式指出先生! – 2012-01-11 07:51:42

+0

+1 *激烈和便攜式*答案;)雖然你可以使它稍微不那麼激烈,如果你使用'FS'的單引號,所以你不必逃避雙引號並在末尾設置'FS'所以你不需要'-v''a = $(awk'{print $(NF-1)}'FS ='['='''<<<'b =「a = 2」';'' – SiegeX 2012-01-11 08:03:02

1

另一便攜式解決方案

IFS='=' 
set -- $b 
let "$1=$2" 
相關問題