![为什么运行脚本时会出现 [[: not found?](https://linux22.com/image/1300521/%E4%B8%BA%E4%BB%80%E4%B9%88%E8%BF%90%E8%A1%8C%E8%84%9A%E6%9C%AC%E6%97%B6%E4%BC%9A%E5%87%BA%E7%8E%B0%20%5B%5B%3A%20not%20found%EF%BC%9F.png)
我正在尝试编写一个脚本来检查文件是否存在。在控制台中我写道
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