String-Vergleich in bash. [[: nicht gefunden
Ich versuche zu vergleichen Zeichenketten in bash. Ich habe bereits eine Antwort gefunden, wie man es auf stackoverflow. Im Skript bin ich versucht, ich bin mit dem code verfasst von Adam in der genannten Frage:
#!/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
Ich habe auch versucht, den Ansatz von ubuntuforums , finden Sie im 2. post
if [[ $var =~ regexp ]]; then
#do something
fi
In beiden Fällen erhalte ich Fehler:
[[: not found
Was mache ich falsch?
InformationsquelleAutor der Frage user1581900 | 2012-09-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
[[
ist ein bash-builtin. Ihre/bin/bash
scheint nicht, um eine tatsächliche bash.InformationsquelleAutor der Antwort Ansgar Wiechers
Wie Sie mit Ihrem Skript?
Wenn Sie nicht mit
sollten Sie versuchen:
oder, wenn das Skript ausführbar ist:
sh und bash sind zwei verschiedene shells. Während im ersten Fall übergeben Sie Ihr Skript als argument für die sh-interpreter, im zweiten Fall entscheiden Sie, auf der ersten Linie, welcher interpreter verwendet werden.
InformationsquelleAutor der Antwort Akos K
Ist die erste Zeile in Ihrem Skript:
oder
die sh-shell erzeugt diese Fehlermeldungen, nicht bash
InformationsquelleAutor der Antwort Wiley
Ich hatte dieses problem bei der Installation Heroku Toolbelt
Dies ist, wie ich das problem gelöst
Wie man sehen kann, /bin/sh ist ein link zu "dash" (nicht bash), und
[[
ist bash syntaktische sugarness. Also habe ich Sie einfach ersetzt, den link auf /bin/bash. Vorsichtig mit rm wie diese in Ihrem system!InformationsquelleAutor der Antwort jperelli
Als @Ansgar erwähnt,
[[
ist ein bashism, dh gebaut in Bash und nicht verfügbar für andere shells. Wenn das Skript portabel sein, verwenden Sie[
. Vergleiche müssen auch eine andere syntax: ändern==
zu=
.InformationsquelleAutor der Antwort Amedee Van Gasse
Angeben bash statt sh, wenn das Skript ausgeführt. Ich persönlich gemerkt, dass Sie anders sind, unter ubuntu 12.10:
bash script.sh arg0 ... argn
InformationsquelleAutor der Antwort Smeterlink