我想連接數組中的值,用逗號分隔。我找到了我的問題的答案,但我不明白解決方案的最後一行是幹什麼的。這裏是代碼:
#!/bin/bash
foo=('foo bar' 'foo baz' 'bar baz')
bar=$(printf ",%s" "${foo[@]}")
bar=${bar:1}
我假設最後一行是這樣做的,以便最後一個元素值沒有逗號。但是......它是怎麼做到的?那個冒號是做什麼的?
我想連接數組中的值,用逗號分隔。我找到了我的問題的答案,但我不明白解決方案的最後一行是幹什麼的。這裏是代碼:
#!/bin/bash
foo=('foo bar' 'foo baz' 'bar baz')
bar=$(printf ",%s" "${foo[@]}")
bar=${bar:1}
我假設最後一行是這樣做的,以便最後一個元素值沒有逗號。但是......它是怎麼做到的?那個冒號是做什麼的?
${bar:1}
擴展爲bar
的子字符串,從字符#1開始(這是第二個字符,因爲計數從零開始)並且繼續到字符串的末尾。所以bar=${bar:1}
從bar
中刪除了最初的逗號。
(有關詳情,請參閱的${parameter:offset}
在§3.5.3 "Shell Parameter Expansion" of the Bash Reference Manual的說明。)
的:
是子串的擴展。它展開從指定偏移量開始的參數的子字符串。從man page:
${parameter:offset}
${parameter:offset:length}
子串擴展。擴展到length
字符parameter
從offset
指定的字符開始。如果省略了length
,則擴展到從offset
指定的字符開始的子字符串parameter
。 ...
謝謝!這解釋了它。感覺像傻瓜一樣用Google搜索「bash colon」。問候。 – orbit