我正在尝试在bash中比较字符串。我已经找到了如何在stackoverflow上比较字符串的答案。在我正在尝试的脚本中,我正在使用Adam在上述问题中提交的代码:
#!/bin/bash
string='My string';
if [[ "$string" == *My* ]]
then
echo "It's there!";
fi
needle='y s'
if [[ "$string" == *"$needle"* ]]; then
echo "haystack '$string' contains needle '$needle'"
fi
我还尝试了ubuntuforums的方法,您可以在第二篇文章中找到
if [[ $var =~ regexp ]]; then
#do something
fi
在这两种情况下,我都收到错误:
[[: not found
我哪里做错了?
9条答案
按热度按时间8xiog9wr1#
[[
是bash内置的,您的/bin/bash
似乎不是一个真正的bash。在文件顶部添加
#!/bin/bash
dwthyt8l2#
你的剧本是怎么写的?如果你写了
您应该尝试:
或者,如果脚本可执行:
qeeaahzv3#
是脚本中的第一行:
或
sh shell生成此错误消息,而不是bash
zaq34kh64#
正如@Ansgar提到的,
[[
是bashism,即内置在Bash中,不适用于其他shell。如果你希望你的脚本是可移植的,使用[
。比较还需要一个不同的语法:将==
更改为=
。hjzp0vay5#
我在安装Heroku Toolbelt时遇到了这个问题
我就是这样解决问题的
正如您所看到的,/bin/sh是指向“dash”(不是bash)的链接,
[[
是bash语法上的甜蜜,所以我只是将链接替换为/bin/bash。在您的系统中小心地像这样使用rm!q9rjltbz6#
如果您知道自己正在使用bash,但仍然得到这个错误,请确保在if中使用空格。
0s0u357o7#
运行脚本时指定bash而不是sh,我个人注意到它们在ubuntu12.10下是不同的:
bash script.sh arg0 ... argn
lqfhib0f8#
在您的终端中执行:
wko9yo5t9#
将文件设置为可执行文件,然后不使用sh执行。
1.通过$ chmod +x文件名使其可执行
1.则使用./filename代替sh文件名