我正在尝试将值加入数组中,用逗号分隔。我找到了问题的答案,但我不明白解决方案的最后一行在做什么。这是代码:
#!/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
.
(有关更多信息,请参阅Bash 参考手册的第 3.5.3 节“Shell 参数扩展”中的描述。)${parameter:offset}
:
is 子串扩展。它从指定的偏移量开始扩展参数的子字符串。从手册页:
${parameter:offset}
${parameter:offset:length}
子串扩展。扩展到最多从 指定的length
字符parameter
开始的字符offset
。如果length
省略,则扩展为parameter
从 指定的字符开始的子字符串offset
。...