UNIX:我尝试使用数组时出错

时间:2016-03-28 18:02:35

标签: regex bash shell unix

我有这个代码,当我在FreeBSD中尝试它时,它向我显示了很多错误......我该如何解决?我检查目录,如果它与变量IGN匹配。 NAME_d应该是一个数组。

max_d=$(find "${DIR}" -type d | wc -l)

for i in `seq 1 $max_d`
do
  check_d=$(find "${DIR}" -type d | head -n "${i}" | tail -n -1 | tr '\/' '\n' | egrep -n "${IGN}")

  if [ ! -z "$check_d" ]; then

    NAME_d+=$i"d "

  fi

done

directory_d=${NAME_d[*]}
sedCmds_d=${directory_d// /;}

erroe

2 个答案:

答案 0 :(得分:1)

不确定它是否会解决它,但如果您使用bash,则应将NAME_d作为数组启动

NAME_d=()

然后添加到数组中你还应该使用parens,例如

NAME_d+=("${i}d ")

答案 1 :(得分:1)

数组是Almquist shell不支持的基础,它是FreeBSD上的默认bourne样式shell(即/ bin / sh)。 shell的一个优点是大多数脚本的运行速度提高了大约3倍。

如果您想使用bashisms,请使用bash来执行您的脚本。例如。称之为bash dirstat.sh或更改shebang。

这是FreeBSD的正确版本。

#!/usr/local/bin/bash

这是便携版,但需要设置PATH:

#!/usr/bin/env bash

您可能还必须先安装bash:pkg add bash