【问题标题】:bash: appending to list fails with "not found" [duplicate]bash:附加到列表失败并显示“未找到”[重复]
【发布时间】:2018-05-02 21:27:57
【问题描述】:

我有以下脚本

list=\(\)
val=123
list+=\(\"$val\"\)

当我将它复制粘贴到终端时,它工作正常,但是当我尝试从 .sh 文件中运行它时,我收到此错误:

file.sh: 9: file.sh: list+=("123"): not found

我在这里找到了this 答案,但它似乎不适用,因为我没有使用空格。

btw,我在( 前面使用\,否则我得到Syntax error: "(" unexpected,这也仅在从脚本文件运行时发生。

导致错误的原因是什么?

我正在开发 GNU bash,版本 4.3.30(1)-release (x86_64-pc-linux-gnu)

【问题讨论】:

  • 出现错误是因为你没有使用bash。
  • \( 也阻止了( 在语法上的意义(即告诉解析器它是一个被管理的数组)。使用斜杠告诉 shell not 将某些内容视为语法。当然,当您使用 /bin/sh 运行脚本时,这无济于事,因为 (1) 不是 bash,并且 (2) 根本没有数组。
  • ...顺便说一句,这是为什么对 bash 脚本使用 .sh 扩展是一个坏主意的(更次要的)原因之一:它错误地暗示它们可以使用 sh 运行,或使用#!/bin/shshebang。带有 shebangs 和 +x 位的脚本是可执行文件,并且可执行文件不应该有扩展名;你不运行ls.elf
  • @CharlesDuffy,谢谢!把它写成答案,如果你愿意,我会接受它

标签: bash ubuntu


【解决方案1】:

您将文字字符串 () 分配给 list,而不是隐式将其声明为空数组。

list=()
val=123
list+=("$val")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-11
    • 2015-08-05
    • 1970-01-01
    • 2014-08-07
    • 1970-01-01
    相关资源
    最近更新 更多