2013-08-17 48 views
1

我想連接數組中的值,用逗號分隔。我找到了我的問題的答案,但我不明白解決方案的最後一行是幹什麼的。這裏是代碼:

#!/bin/bash 
foo=('foo bar' 'foo baz' 'bar baz') 
bar=$(printf ",%s" "${foo[@]}") 
bar=${bar:1} 

我假設最後一行是這樣做的,以便最後一個元素值沒有逗號。但是......它是怎麼做到的?那個冒號是做什麼的?

回答

1

${bar:1}擴展爲bar的子字符串,從字符#1開始(這是第二個字符,因爲計數從零開始)並且繼續到字符串的末尾。所以bar=${bar:1}bar中刪除了最初的逗號。

(有關詳情,請參閱的${parameter:offset}§3.5.3 "Shell Parameter Expansion" of the Bash Reference Manual的說明。)

+0

謝謝!這解釋了它。感覺像傻瓜一樣用Google搜索「bash colon」。問候。 – orbit

1

:是子串的擴展。它展開從指定偏移量開始的參數的子字符串。從man page

${parameter:offset}
${parameter:offset:length}
子串擴展。擴展到length字符parameteroffset指定的字符開始。如果省略了length,則擴展到從offset指定的字符開始的子字符串parameter。 ...