连接数组的值。 $ {吧:1}

时间:2013-08-17 20:36:17

标签: bash

我正在尝试将数组中的值连接起来,用逗号分隔。我找到了问题的答案,但我不明白解决方案的最后一行是做什么的。这是代码:

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

我假设最后一行正在制作它,以便最后一个元素值没有逗号。但是......它是怎么做到的?冒号是做什么的?

2 个答案:

答案 0 :(得分:1)

${bar:1}扩展为bar的子字符串,从字符#1开始(这是第二个字符,因为计数从零开始)并继续到字符串的结尾。因此,bar=${bar:1}会从bar删除初始逗号。

(有关详情,请参阅§3.5.3 "Shell Parameter Expansion" of the Bash Reference Manual${parameter:offset}的说明。)

答案 1 :(得分:1)

:是子字符串扩展。它扩展了从指定偏移量开始的参数的子字符串。来自man page

  

${parameter:offset}
  ${parameter:offset:length}
  子字符串扩展。length指定的字符开始,扩展到parameteroffset个字符。如果省略length,则从parameter指定的字符开始扩展为offset的子字符串。 ...