【发布时间】: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,谢谢!把它写成答案,如果你愿意,我会接受它