为什么运行脚本时会出现 [[: not found?

为什么运行脚本时会出现 [[: not found?

我正在尝试编写一个脚本来检查文件是否存在。在控制台中我写道

if [[ -a /path/to/file.txt ]]; then echo "not mod"; else echo "mod"; fi

我得到了

not mod

但是当我编写脚本来做同样的事情时:

#!/bin/sh
if [[ -a /path/to/file.txt ]]; then echo "not mod"; else echo "mod"; fi

然后执行脚本,我得到这个:

./ex.sh: 2: [[: not found
mod

我将脚本保存在当前目录中并将其命名为 ex.sh,然后确保它是可执行的。要调用该脚本,我执行以下操作:

./ex.sh

为什么我会遇到这个问题?我已经尝试了很多方法:

if [ -a /home ...

if test -a /home ...

两人都回来了

13: -a: unexpected operator

答案1

您正在运行为以下对象编写的脚本狂欢在下面,缺少许多扩展语法功能 -[[是一个bash内置命令,在 中不可用sh

更改#!/bin/sh#!/bin/bash或 更改为#!/usr/bin/env bash

答案2

运行脚本时指定 bash 而不是 sh。我个人注意到它们在 ubuntu 12.10 下有所不同:

bash script.sh arg0 ... argn

相关内容