Aspas simples em Bash no comando find

1

Estou tendo alguns problemas para fazer um script de shell funcionar. Eu estou tentando gerar dinamicamente o comando find com base na entrada do usuário e estou correndo para o problema que minhas variáveis no comando find estão ficando entre aspas simples como já descrito aqui .

Então, se eu fizer eco da minha variável, eles aparecerão como -iname "*.flv" , mas uma vez no comando find eles são -iname "*.flv" com aspas simples e o comando find não é executado.

Eu tentei implementar as respostas dadas em outro segmento de SO, mas não consigo descobrir.

Alguma ideia do que está errado aí?

Obrigado!

if [[ ! "$medium" == "" ]]
  then
    needles=$needles' -iname "'*$medium*'"'
  fi

  echo $needles
  #-iname "*.flv"

  echo $path
  #/Users/user/Movies/

  find "$path" $needles -type f -exec basename {} \; | gshuf -n 1
  # + find '/Users/user/Movies' -iname '"*dvd*"' -type f -exec basename '{}' ';'
    
por mediocre 17.02.2014 / 00:47

1 resposta

3

Como eu disse na minha resposta à pergunta vinculada, você não tem aspas simples misteriosamente aparecendo. As aspas simples fazem parte da exibição de rastreio do bash da sua linha de comando. O que você tem são aspas duplas, e você mesmo as colocou lá. Então não faça isso.

Sua melhor aposta é tornar needles uma matriz; Há um exemplo na resposta à pergunta vinculada também, mas aqui está a solução para seu problema específico:

# Make needles an empty array
needles=()

# If medium is not empty, add two parameters to needles:
if [[ -n $medium ]]; then
  # We quote *$medium* so that the asterisks won't get glob-expanded, and 
  # so that the value won't get word split even if it includes whitespace.
  # NO QUOTES ARE ADDED TO THE VALUE.
  needles+=(-iname "*$medium*")
fi

# The expression "{needles[@]}" means:
#   expand this into each element of needles (needles[@])
#   and don't expand the elements even if they include whitespace ("")
find "$path" "${needles[@]}" -type f -exec basename {} \; | gshuf -n 1
    
por 17.02.2014 / 01:17