Estou passando a variável akms
para a função chamada sufx
. Eu sou capaz de capturar corretamente o segundo elemento da matriz e definir a variável fskl
.
Eu quero a capacidade de definir a variável verbiage
de acordo com o valor numérico de -v
. Como posso fazer isso para a função sufx
? Atualmente verbiage
está apenas tomando um valor de string.
akms=("-v 3" "INCLUDE")
sufx akms
Aqui está a função
sufx ()
{
typeset -n _akms="$1"
## Capture INCLUDE or EXCLUDE option for grep
local fskl="" verbiage=0
for s in "${_akms[@]}"; do
case $s in
("XCL"|"INCL"|"INCLUDE") fskl="INCLUDE" ;;
("NCL"|"EXCL"|"EXCLUDE") fskl="EXCLUDE" ;;
(*) verbiage=${s#*-v} ;;
esac
done
}
Eu acho que você quer dizer:
Como verificar se um elemento de array é do padrão
-v
então "qualquer coisa" então "caractere(s) numérico(s) ... Você pode fazer isso usando uma correspondência de expressão regular de substring combash
colchetes de teste estendidos e o=~
operador regex ie[[ "$element" =~ regex ]]
.Como extrair apenas os caracteres numéricos de uma string armazenada em um parâmetro... Você pode fazer isso usando a
bash
expansão de parâmetro para excluir todos os caracteres não numéricos com, por exemplo"${parameter//[^0-9]}"
, .Então, combinando os dois métodos acima:
Ou, usando um padrão globbing com,
case ... esac
por exemplo:Consulte também O globbing pode ser usado para pesquisar o conteúdo do arquivo?
Sugiro passar a
"-v 3"
string como uma opção separada letter + option argument"-v" "3"
. Em seguida, você pode usar o analisador de opções interno do bash shellgetopts
para processá-los:O uso torna-se
Você pode até usar
akms=("-v" "3" -- "INCLUDE")
para marcar explicitamente o fim das opções (o que permitiria usar argumentos sem opção começando com um traço).