我正在尝试将数组中的值连接起来,用逗号分隔。我找到了问题的答案,但我不明白解决方案的最后一行是做什么的。这是代码:
#!/bin/bash
foo=('foo bar' 'foo baz' 'bar baz')
bar=$(printf ",%s" "${foo[@]}")
bar=${bar:1}
我假设最后一行正在制作它,以便最后一个元素值没有逗号。但是......它是怎么做到的?冒号是做什么的?
答案 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
指定的字符开始,扩展到parameter
个offset
个字符。如果省略length
,则从parameter
指定的字符开始扩展为offset
的子字符串。 ...