我有一个 BASH 脚本问题,我已经缩小了范围,但我无法理解我看到的内容。我想以简洁的方式获取数组的子字符串。这是我在 bash 中看到的内容,使用“set -x”,以便在执行命令时打印它们:
$: read -a colours
+ read -a colours
blue green red yellow pink purple
$: echo ${colours[@]}
+ echo blue green red yellow pink purple
blue green red yellow pink purple
$: expr substr "${colours[@]}" 16 6
+ expr substr blue green red yellow pink purple 16 6
expr: syntax error: unexpected argument ‘yellow’
$: expr substr \"${colours[@]}\" 16 6
+ expr substr '"blue' green red yellow pink 'purple"' 16 6
expr: syntax error: unexpected argument ‘yellow’
最后一次尝试expr substr
命令时,数组元素返回了奇怪的引号,那么这是从哪里来的呢?帮我理解一下这expr substr
是怎么回事,还是这是一个错误?
编辑:我在下面列出了一些平面引用字符串的期望行为,但为什么我不能以相同的方式引用数组?
$: all_colours=${colours[@]}
+ all_colours='blue green red yellow pink purple'
$: expr substr $all_colours 16 6
+ expr substr blue green red yellow pink purple 16 6
expr: syntax error: unexpected argument ‘yellow’
$: expr substr "$all_colours" 16 6
+ expr substr 'blue green red yellow pink purple' 16 6
yellow