use*_*900 138 bash shell string-comparison ubuntu-11.04
我试图比较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
Run Code Online (Sandbox Code Playgroud)
我也尝试过你可以在第二篇文章中找到的ubuntuforums方法
if [[ $var =~ regexp ]]; then
#do something
fi
Run Code Online (Sandbox Code Playgroud)
在这两种情况下我都收到错误:
[[: not found
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
Ako*_*s K 157
你是如何运行脚本的?如果你这样做了
$ sh myscript
Run Code Online (Sandbox Code Playgroud)
你应该试试:
$ bash myscript
Run Code Online (Sandbox Code Playgroud)
或者,如果脚本是可执行的:
$ ./myscript
Run Code Online (Sandbox Code Playgroud)
sh和bash是两种不同的贝壳.在第一种情况下,您将脚本作为参数传递给sh解释器,在第二种情况下,您决定将使用哪个解释器的第一行.
Ans*_*ers 127
[[是一个bash-builtin.你/bin/bash似乎不是一个真正的狂欢.
小智 75
是脚本中的第一行:
#!/bin/bash
Run Code Online (Sandbox Code Playgroud)
要么
#!/bin/sh
Run Code Online (Sandbox Code Playgroud)
sh shell产生这个错误消息,而不是bash
jpe*_*lli 14
我在安装Heroku Toolbelt时遇到了这个问题
这就是我解决问题的方法
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 ago 15 2012 /bin/sh -> dash
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,/ bin/sh是"破折号"(不是bash)的链接,并且[[是bash语法糖度.所以我只是将链接替换为/ bin/bash.在你的系统中小心使用这样的rm!
$ sudo rm /bin/sh
$ sudo ln -s /bin/bash /bin/sh
Run Code Online (Sandbox Code Playgroud)
Hat*_*zil 10
如果您知道自己正在使用 bash,但仍然收到此错误,请确保在 if 中写入空格。
[[1==1]] # This outputs error
[[ 1==1 ]] # OK
Run Code Online (Sandbox Code Playgroud)