【发布时间】:2018-09-05 13:21:59
【问题描述】:
我开始使用 bash 编程,我想打印数组的特定位置,但是当我尝试时出现此错误:错误替换
#!/bin/sh
user=`cut -d ";" -f1 $ultimocsv | sort -d | uniq -c`
arr=$(echo $user | tr " " "\n")
a=5
echo "${arr[$a]}" #Error:bad substitution
为什么?
【问题讨论】:
-
你是如何运行脚本的?
-
您在数组和用于运行命令、捕获和命令输出的命令替换语法
$(..)之间感到困惑。arr=$(echo $user | tr " " "\n")部分执行后者并将输出存储在变量 arr 而不是数组中。此外,您正在运行 POSIX bourne shell sh 作为 she-bang(#!/bin/sh) 解释器集,它不支持数组!"${arr[$a]}"表示从数组的索引 a 打印元素。 -
您需要使用
bashshell 运行脚本,即bash <scriptname>或将解释器设置为#!/usr/bin/env bash并以./<scriptname>运行它,在这种情况下您可以执行arr=( $(echo $user | tr " " "\n") ),即但不推荐,因为它会对存在的值进行分词。 -
数组更多地用于存储单个命令的多个参数,而不是实现任意容器。在其他语言中,许多被认为是好的设计并不真正适用于 shell 编程。