Estações de trabalho on-line OnWorks Linux e Windows

Logotipo

Hospedagem online grátis para estações de trabalho

<Anterior | Conteúdo | Próxima>

Operações de String

Existe um grande conjunto de expansões que podem ser usadas para operar em cordas. Muitas dessas expansões são particularmente adequadas para operações em nomes de caminho.

$ {#parâmetro}

se expande no comprimento da string contida por parâmetro. Normalmente, parâmetro é uma string; entretanto, se parâmetro é também @ or *, então a expansão resulta no número de parâmetros posicionais.



[me @ linuxbox ~] $ foo = "Esta corda é longa."

[me @ linuxbox ~] $ echo "'$ foo' tem $ {# foo} caracteres."

'Esta corda é longa.' tem 20 caracteres.

[me @ linuxbox ~] $ foo = "Esta corda é longa."

[me @ linuxbox ~] $ echo "'$ foo' tem $ {# foo} caracteres."

'Esta corda é longa.' tem 20 caracteres.


${parâmetro:compensar}

${parâmetro:compensar:comprimento}

Essas expansões são usadas para extrair uma parte da string contida em parâmetro. A extração começa em compensar caracteres do início da string e continua até o final da string, a menos que o comprimento é especificado.


[me @ linuxbox ~] $ foo = "Esta corda é longa."

[me @ linuxbox ~] $ echo $ {foo: 5}

string é longa.

[me @ linuxbox ~] $ echo $ {foo: 5: 6}

corda

[me @ linuxbox ~] $ foo = "Esta corda é longa."

[me @ linuxbox ~] $ echo $ {foo: 5}

string é longa.

[me @ linuxbox ~] $ echo $ {foo: 5: 6}

corda


Se o valor de compensar for negativo, significa que começa no final da string, e não no início. Observe que os valores negativos devem ser precedidos por um espaço para evitar confusão com o ${parâmetro:-palavra} expansão. comprimento, se presente, não deve ser menor que zero.

If parâmetro is @, o resultado da expansão é comprimento parâmetros posicionais, começando em

Deslocamento.



[me @ linuxbox ~] $ foo = "Esta corda é longa."

[me @ linuxbox ~] $ echo $ {foo: -5}

longo.

[me @ linuxbox ~] $ echo $ {foo: -5: 2}

lo

[me @ linuxbox ~] $ foo = "Esta corda é longa."

[me @ linuxbox ~] $ echo $ {foo: -5}

longo.

[me @ linuxbox ~] $ echo $ {foo: -5: 2}

lo


${parâmetro#de cinto de segurança}

${parâmetro##de cinto de segurança}

Essas expansões removem uma parte dianteira da corda contida em parâmetro definido por de cinto de segurança. de cinto de segurança é um padrão curinga como aqueles usados ​​na expansão do nome do caminho. A diferença nas duas formas é que o # forma remove a correspondência mais curta, enquanto o ## formulário remove a correspondência mais longa.



[me @ linuxbox ~] $ foo = file.txt.zip [me @ linuxbox ~] $ echo $ {foo # *.} txt.zip

[me @ linuxbox ~] $ echo $ {foo ## *.}

zip

[me @ linuxbox ~] $ foo = file.txt.zip [me @ linuxbox ~] $ echo $ {foo # *.} txt.zip

[me @ linuxbox ~] $ echo $ {foo ## *.}

zip


${parâmetro%de cinto de segurança}

${parâmetro%%de cinto de segurança}

Essas expansões são iguais ao # e ## expansões acima, exceto que removem o texto do final da string contida em parâmetro em vez de desde o início.



[me @ linuxbox ~] $ foo = file.txt.zip

[me @ linuxbox ~] $ foo = file.txt.zip


[me @ linuxbox ~] $ echo $ {foo%. *}

arquivo.txt

[me @ linuxbox ~] $ echo $ {foo %%. *}

lima

[me @ linuxbox ~] $ echo $ {foo%. *}

arquivo.txt

[me @ linuxbox ~] $ echo $ {foo %%. *}

lima


${parâmetro/de cinto de segurança/corda}

${parâmetro//de cinto de segurança/corda}

${parâmetro/#de cinto de segurança/corda}

${parâmetro/%de cinto de segurança/corda}

Esta expansão executa uma busca e substituição no conteúdo de parâmetro. Se for encontrado um texto correspondente ao curinga de cinto de segurança, é substituído pelo conteúdo de corda. Na forma normal, apenas a primeira ocorrência de de cinto de segurança É substituído. No // formulário, todas as ocorrências são substituídas. O /# forma requer que a correspondência ocorra no início da string, e o /% forma requer que a correspondência ocorra no final da string. Em todas as formas, /corda pode ser omitido, fazendo com que o texto correspondido por de cinto de segurança Para ser deletado.



[me @ linuxbox ~] $ foo = JPG.JPG [me @ linuxbox ~] $ echo $ {foo / JPG / jpg} jpg.JPG

[me @ linuxbox ~] $ echo $ {foo // JPG / jpg}

jpg.jpg

[me @ linuxbox ~] $ echo $ {foo / # JPG / jpg}

jpg.JPG

[me @ linuxbox ~] $ echo $ {foo /% JPG / jpg}

JPG.jpg

[me @ linuxbox ~] $ foo = JPG.JPG [me @ linuxbox ~] $ echo $ {foo / JPG / jpg} jpg.JPG

[me @ linuxbox ~] $ echo $ {foo // JPG / jpg}

jpg.jpg

[me @ linuxbox ~] $ echo $ {foo / # JPG / jpg}

jpg.JPG

[me @ linuxbox ~] $ echo $ {foo /% JPG / jpg}

JPG.jpg


É bom saber a expansão de parâmetros. As expansões de manipulação de string podem ser usadas como substitutos para outros comandos comuns, como sede e corte. As expansões podem melhorar a eficiência dos scripts, eliminando o uso de programas externos. Por exemplo, vamos modificar o palavra mais longa programa discutido no capítulo anterior para usar a expansão de parâmetro $ {# j} no lugar da substituição do comando $ (eco

-n $ j | wc -c) e sua subcamada resultante, assim:


#! / Bin / bash

# longest-word3: encontra a string mais longa em um arquivo para i; Faz

if [[-r $ i]]; então max_word = max_len = 0

#! / Bin / bash

# longest-word3: encontra a string mais longa em um arquivo para i; Faz

if [[-r $ i]]; então max_word = max_len = 0


para j em $ (strings $ i); Faz

len = $ {# j}

if ((len> max_len)); então max_len = $ len max_word = $ j

fi

feito

echo "$ i: '$ max_word' ($ max_len caracteres)"

fi feito

para j em $ (strings $ i); Faz

len = $ {# j}

if ((len> max_len)); então max_len = $ len max_word = $ j

fi

feito

echo "$ i: '$ max_word' ($ max_len caracteres)"

fi feito


A seguir, compararemos a eficiência das duas versões usando o tempo comando:



[me @ linuxbox ~] $ tempo palavra mais longa2 dirlist-usr-bin.txt

dirlist-usr-bin.txt: 'scrollkeeper-get-extended-content-list' (38 caracteres)

[me @ linuxbox ~] $ tempo palavra mais longa2 dirlist-usr-bin.txt

dirlist-usr-bin.txt: 'scrollkeeper-get-extended-content-list' (38 caracteres)


reais

usuário

0m3.618s

0m1.544s

reais

usuário


sistema 0m1.768s

[me @ linuxbox ~] $ tempo palavra mais longa3 dirlist-usr-bin.txt

dirlist-usr-bin.txt: 'scrollkeeper-get-extended-content-list' (38 caracteres)

sistema 0m1.768s

[me @ linuxbox ~] $ tempo palavra mais longa3 dirlist-usr-bin.txt

dirlist-usr-bin.txt: 'scrollkeeper-get-extended-content-list' (38 caracteres)


reais

usuário

0m0.060s

0m0.056s

reais

usuário


sistema 0m0.008s

sistema 0m0.008s


imagem

A versão original do script leva 3.618 segundos para digitalizar o arquivo de texto, enquanto a nova versão, usando a expansão do parâmetro, leva apenas 0.06 segundos-uma melhoria muito significativa.


Top OS Cloud Computing na OnWorks: