意外的“(”——Shell 脚本在 CentOS 上使用 bash 而不是在 Ubuntu 上工作

Dee*_*ace 0 shell bash shell-script

我有以下脚本:

names=($(python3 script.py -p "$GIT_PREVIOUS_COMMIT" -c "$GIT_COMMIT" | tr -d '[],'))
Run Code Online (Sandbox Code Playgroud)

它适用于带有 bash 4.1.2(2) 的 Centos 6 机器,但是当我尝试在 Ubuntu 上执行时,我得到:

bashfile.sh: 1: bashfile.sh: Syntax error: "(" unexpected
Run Code Online (Sandbox Code Playgroud)

Gil*_*il' 7

此脚本适用于 bash 4.3.48。问题是你没有用 bash 执行它。它在顶部缺少一条shebang线。

#!/bin/bash
names=($(python3 script.py -p "$GIT_PREVIOUS_COMMIT" -c "$GIT_COMMIT" | tr -d '[],'))
…
Run Code Online (Sandbox Code Playgroud)

如果没有 shebang 行,脚本将由默认的 sh 实现执行。在 Ubuntu 上,这不是 bash,而是 dash。Dash 不支持数组。