Сравните строковый литерал Bash с локальной переменной
#!/bin/bash
function getComment(){
local lang=$1;
local theComment=$2;
if [$lang == "Java"] #Surprisingly, an error occurs here: prog.sh: line 6: [Java: command not found
then
echo "//"$theComment; return;
else
echo "Language not found!"; return;
fi
}
getComment "Java" "Whoo!";
exit $?
Я пишу Bash script, который сравнивает переменную с строковым литералом, и я использую [$lang == "Java"]
(как показано выше), чтобы сравнить значение lang
с "Java"
. Однако при этом сравнении возникает следующая ошибка:
stderr:
prog.sh: line 6: [Java: command not found
Я тоже пытался использовать [$lang -eq "Java"]
и ($lang -eq "Java")
, но эти инструкции тоже не работали, и они произвели точно такую же ошибку.
Почему возникает эта ошибка, и каков правильный способ сравнения локальной переменной с строковым литералом?
Ответы
Ответ 1
Вам нужны пробелы вокруг [
и ]
:
if [ "$lang" = "Java" ]
[
- это команда (это синоним для test
), и, как и любая другая команда, вы делите параметры с пробелами.
Вы также должны поместить переменные в двойные кавычки, если значение пустое или содержит пробельные или подстановочные символы.
Наконец, оператор для сравнения строк =
, хотя некоторые версии test
позволяют ==
в качестве расширения.
Ответ 2
Во-первых, вы должны заключить переменную между двойными кавычками, потому что переменная может иметь некоторые пробелы или специальные символы.
Наконец, помните, что "[" это исполняемый файл сам по себе (обычно находится в /bin ).
if [ "$lang" == "Java" ]; then
Ответ 3
Прежде всего, не используйте [] - это лучше, чтобы использовать [[.
И второе - вам нужно добавить несколько пробелов:
if [[ $lang == Java ]]