passando opções de uma matriz para o comando ls no UNIX [closed]

0

Estou escrevendo um script de shell que usa vários argumentos como -l -s -a -f thing ming e acrescenta apenas aqueles que começam com - .

Este é o meu código:

arrayOfArgs=() 
for arg in "$@":
do
    case arg in 
    -*) arrayofArgs+=($args) ;;
    esac
 done

Agora, meu arrayOfArgs imprime isso

-l, -s, -a, -f.

O que me preocupa é que o resultado seja separado pela vírgula.

é ls {"$arrayOfArgs"} equivalente a ls -l -s -a -f ?

    
por Samun 23.04.2018 / 04:59

1 resposta

1

Em vez de tentar resolver a pergunta que você fez, essa resposta oferece uma solução que tenta resolver o problema subjacente. Para este exemplo, assumi que os argumentos a e s são booleanos (comutadores), mas o argumento l recebe um parâmetro:

unset -v flagA flagS valueL
while getopts "al:s" OPT
do
    case "$OPT" in
        a)    echo "Got a"; flagA=true ;;
        s)    echo "Got s"; flagS=true ;;
        l)    printf 'Got l with value "%s"\n' "$OPTARG"; valueL="$OPTARG" ;;
    esac
done
shift "$((OPTIND - 1))"

printf '%s\n' "flagA=${flagA-unset}, flagS=${flagS-unset}, valueL=${valueL-unset}"
if [ "$#" -gt 0 ]; then
  printf 'Other arguments:\n'
  printf ' - "%s"\n' "$@"
fi

Mais informações na página bash man.

    
por 23.04.2018 / 14:52