Comparando strings

2

Estou tendo problemas para comparar duas strings. Mesmo que sejam idênticos quando impressos, minha instrução if retorna false.

#!/bin/bash

string1="HDMI"
string2="PC Speaker"

hash=$(pacmd list-sinks | grep active)
echo $hash
trigger="active port: <analog-output-speaker>"
echo $trigger

if [ "$hash" == "$trigger" ]; then
   pacmd set-card-profile 0 output:hdmi-stereo+input:analog-stereo  
   echo $string1
else
   pacmd set-card-profile 0 output:analog-stereo+input:analog-stereo    
   echo $string2
fi

Produz a seguinte saída:

active port: <analog-output-speaker>
active port: <analog-output-speaker>
Welcome to PulseAudio! Use "help" for usage information.
>>> >>> PC Speaker
    
por user106581 14.03.2015 / 13:20

3 respostas

3

Sempre cite variáveis

você diz echo $hash , mas isso remove espaços em branco iniciais e finais e condensa todos os espaços internos. não mostra o conteúdo da variável $hash

diga em vez de echo "<$hash>" e você verá o espaço em branco inicial.

Parece que o pulso de áudio está usando uma aba antes da palavra ativa. Então, coloque uma guia no início do valor no acionador e funcionará.

    
por 14.03.2015 / 13:28
1

Se você adicionar set -vx em #!/bin/bash e, em seguida, executar seu script, verá:

[[ active port: <analog-output-speaker> == active port: <analog-output-speaker> ]]

E você pode ver que as strings não são as mesmas porque a primeira string tem alguns espaços.

para remover espaços da string inteira , você pode usar: trim -d '[[:space:]]

para remover espaços da string principal , você pode usar: sed -e 's/^[[:space:]]*//'

para remover espaços da string de acompanhamento , você pode usar: sed -e 's/[[:space:]]*$//'

    
por 14.03.2015 / 13:37
0

Não imprimíveis que incomodam você.

Tente isto:

$ hash="   active port: <analog-output-speaker>%%%%%"   
$ echo $hash
active port: <analog-output-speaker>%%%%%
$ echo "<$hash>"
<   active port: <analog-output-speaker>%%%%%>
$ if [[ "$hash" =~ "active port" ]]; then echo matched; else echo no match; fi
matched
$ if [[ "$hash" =~ "non active port" ]]; then echo matched; else echo no match; fi
no match
    
por 14.03.2015 / 13:36

Tags