Como posso remover uma entrada de uma lista em um script de shells?

1

Eu tenho o seguinte script:

#!/bin/bash
# Bash Menu Script Example

PS3='Please enter your choice: '
options=("Option 1" "Option 2" "Option 3" "Quit")
select opt in "${options[@]}"
do
    case $opt in
        "Option 1")
            echo "you chose choice 1"
            ;;
        "Option 2")
            echo "you chose choice 2"
            ;;
        "Option 3")
            echo "you chose choice 3"
            ;;
        "Quit")
            break
            ;;
        *) echo invalid option;;
    esac
done

Meu problema é que não sei como remover uma opção da lista depois que ela foi selecionada. Isso é possível? Como?

    
por user259584 18.03.2014 / 18:16

1 resposta

1

A maneira mais simples é usar unset :

$ options=(aa bb cc dd)
$ echo ${options[@]}
aa bb cc dd
## Remove the 3d element of the array (arrays start at 0)
$ unset options[2]
$ echo ${options[@]}
aa bb dd

Para mais detalhes, consulte help unset :

unset: unset [-f] [-v] [name ...]
    Unset values and attributes of shell variables and functions.

    For each NAME, remove the corresponding variable or function.

    Options:
      -f    treat each NAME as a shell function
      -v    treat each NAME as a shell variable

    Without options, unset first tries to unset a variable, and if that fails,
    tries to unset a function.

    Some variables cannot be unset; also see 'readonly'.

    Exit Status:
    Returns success unless an invalid option is given or a NAME is read-only.
    
por terdon 18.03.2014 / 18:33