当我执行我的脚本sh myscript.sh
时,我收到一条错误消息,指出[[:
是一个意外的操作符'但是当我在bash模拟器中运行我的脚本时({ {3}})它有效并且不会返回此错误。此外,当我在模拟器中使用sh
运行脚本时,它可以工作,即使在我的服务器上也不会返回错误。
我已经检查了下面的链接,根据我的理解,我需要使用bash
命令。 sh
命令有什么问题?如何启用[[:
等功能?
注意:我是学生,因此我只能在学校运行bash终端。因此,任何可以保证不会返回此错误的帮助都将非常受欢迎。
答案 0 :(得分:4)
简单回答就是使用bash myscript.sh
。如下所述,[[
语法是特定于bash的,而不是sh。
这是两个独立的shell,每个shell都有自己的脚本语言变体。一个粗俗的比喻就是bash是sh,c ++是c。 Bash有更多的功能,一些更简单的语法,但它们有很多共同之处。
如果您的文件顶部有#!/bin/bash
,那么它就是一个bash脚本。如果它不可执行,请输入bash yourscript.sh
,如果不可执行,则输入./yourscript.sh
。
如果你有#!/bin/sh
,那么它就是一个sh脚本。您可以按照上述原则运行此操作。
答案 1 :(得分:2)
许多Linux发行版使用比Bash更小,更简单的shell实现来实现其默认的sh
二进制文件。他们出于各种原因这样做。如果您需要Bash,请明确运行bash
。
答案 2 :(得分:1)
答案 3 :(得分:1)
你可以这样想:
有许多人类语言" (法语,日语,英语,印地语等)
有许多不同的贝壳语言" (sh,csh,tcsh,zsh,bash等)
将sh
和bash
视为语言,而不是命令。
您遇到的错误是因为您的计算机希望您在sh
中与之通话,但实际上您正在bash
与之通话。这就像向德国翻译提供法语文件......
因此,要解决此问题,您只需要通知您的计算机您的脚本是用bash
编写的。
要执行此操作,只需将此行添加到脚本文件的最顶部:
<强>#!/斌/庆典强>