Como posso extrair os últimos caracteres X de uma variável de string?

3

Estou lendo a última linha de um arquivo em uma variável. Então eu quero pegar os últimos caracteres X da variável string:

#!/bin/bash
someline="this is the last line content"
echo ${someline}
somepart=${someline: -5}
echo ${somepart}

Executar com: sh lastchars.sh

Resultado:

this is the last line content
line 4: Bad substitution

O que pode estar errado aqui?

    
por membersound 20.11.2017 / 12:02

2 respostas

16

Parece que você não está usando bash . Só posso reproduzir o erro mostrado se eu usar dash em vez de bash :

  1. bash :

    $ line="someline content"
    $ echo ${line}
    someline content
    $ lastchars=${line: -5}
    $ echo ${lastchars}
    ntent
    
  2. dash :

    $ line="someline content"
    echo ${line}
    lastchars=${line: -5}
    echo ${lastchars}
    $ someline content
    $ dash: 3: Bad substitution
    

Sua linha shebang está apontando para bash , mas você está executando o script com sh , então o shebang é ignorado. /bin/sh nos sistemas Ubuntu é, na verdade, dash , um shell mínimo que não suporta a sintaxe que você está tentando usar.

Ao usar uma linha shebang, não há razão para chamar explicitamente um shell para o script, apenas torná-lo executável ( chmod a+x /path/to/script.sh ) e executá-lo sem especificar um interpretador:

/path/to/script.sh

Como alternativa, basta usar o caminho certo:

bash /path/to/script.sh
    
por terdon 20.11.2017 / 12:34
0

Obviamente, usar as funções internas de um determinado shell é bom, mas você também pode realizar a tarefa usando os comandos padrão do UNIX, então ele funcionará em qualquer shell:

String="This is some text"
StrLen='echo ${String} | wc -c'
From='expr $StrLen - 5'
echo $String | cut -c${From}-${StrLen}
    
por WillemK 20.11.2017 / 23:56

Tags