【问题标题】:Error in creating array variable in Debian 8.4在 Debian 8.4 中创建数组变量时出错
【发布时间】:2016-08-16 03:58:33
【问题描述】:

我有一个非常基本的 shell 脚本,其中包含

#!/bin/sh
NAME[0]="Hello"
echo ${NAME[0]}

因此,当我运行此脚本时,会出现错误提示

./test.sh: 2: ./test.sh: NAME[0]=Hello: not found
./test.sh: 3: ./test.sh: Bad substitution

所以基本上我浏览了一些教程,发现这是声明数组的基本方法。所以我很困惑为什么这是一个错误。有什么想法吗?

【问题讨论】:

  • 您正在运行/bin/sh,如果该外壳实际上是 bash,则使用该名称调用它会将其置于没有数组的 POSIX 兼容模式。请改用#!/usr/bin/env bash 的shebang。
  • @ghoti 恕我直言答案已经包含此信息:)

标签: arrays linux bash shell sh


【解决方案1】:

您以#!/bin/sh 启动脚本,它有一个指向dash 的软链接(当前版本的sh 符合shell 的POSIX 1003.2 和1003.2a 规范)和dash 不支持数组。从 debian 8 开始,dash 已成为默认 shell,因此如果您运行 ls -la /bin/sh,输出将为 /bin/sh -> dash

但是 bash 仍然是默认的登录 shell,只是 shell 脚本中使用的默认 /bin/sh 发生了变化。因此,如果您在终端上运行代码,它将正常工作。有关为何在 Ubuntu 中进行此切换的更多信息,请访问 here

如果你想在你的脚本中使用数组,那么你必须以#!/bin/bash开始你的脚本

所以如果像这样修改你的脚本可以完美运行

#!/bin/bash
NAME[0]="Hello"
echo ${NAME[0]}

更多关于 Dash as Sh 的信息 DashAsBinSh

【讨论】:

  • 成功了,谢谢!由于我没有安装它,我是否也可以将 bash 视为默认 shell?当我安装操作系统时它已经在那里了。
  • @Patrick bash 仍然是默认的登录 shell,只有 shell 脚本中使用的默认 /bin/sh 发生了变化,更多信息可以找到here
猜你喜欢
  • 1970-01-01
  • 2021-02-04
  • 1970-01-01
  • 2020-10-03
  • 1970-01-01
  • 2014-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多