Estou tentando executar o script de shell a seguir, que deve verificar se uma string não tem espaço nem está vazia. No entanto, estou obtendo a mesma saída para todas as 3 strings mencionadas. Eu tentei usar a sintaxe "[[" também, mas sem sucesso.
Aqui está o meu código:
str="Hello World"
str2=" "
str3=""
if [ ! -z "$str" -a "$str"!=" " ]; then
echo "Str is not null or space"
fi
if [ ! -z "$str2" -a "$str2"!=" " ]; then
echo "Str2 is not null or space"
fi
if [ ! -z "$str3" -a "$str3"!=" " ]; then
echo "Str3 is not null or space"
fi
Estou recebendo a seguinte saída:
# ./checkCond.sh
Str is not null or space
Str2 is not null or space
var=value [command [args]]
é a sintaxe, na qual um valor é atribuído a uma variável. para comparação,[
(/usr/bin/[
) é o comando e requer que var1,! = & var2 sejam 3 argumentos separados. var1! = var2 é um único argumento.Para verificar a string vazia no shell
OU
fonte
=
. O==
é um hack não portátil inventado por autores de shell para confundir as mentes de jovens programadores.Caso você precise verificar qualquer quantidade de espaço em branco, não apenas um espaço, você pode fazer o seguinte:
Para retirar a sequência de espaço em branco extra (também condensa os espaços em branco no meio a um espaço):
O
--
garante que se$original
contiver opções entendidas por eco, eles ainda serão considerados como argumentos normais a serem ecoados. Também é importante não colocar""
ao redor$original
, ou os espaços não serão removidos.Depois disso, você pode apenas verificar se
$trimmed
está vazio.fonte
Outro teste rápido para uma string conter algo além de espaço.
"-n" significa string de comprimento diferente de zero.
Então, as duas primeiras barras significam que correspondem a todos os itens a seguir, em nosso caso, espaço (s). Em seguida, a terceira barra é seguida pela string de substituição (vazia) e fechada com "}". Observe a diferença da sintaxe usual da expressão regular.
Você pode ler mais sobre a manipulação de strings em scripts de shell bash aqui .
fonte
[[ -n "$1" ]]
o mesmo que[[ ! -z "$1" "]]
?Para verificar se uma string está vazia ou contém apenas espaços em branco, você pode usar:
Consulte Expansão de parâmetros de shell e correspondência de padrões no Manual do Bash.
fonte
Retirar todas as novas linhas e espaços da string fará com que um em branco seja reduzido a nada que possa ser testado e aplicado
fonte