Como mapear um elemento da matriz que é separado por novas linhas em uma nova matriz com vários elementos

4

Eu selecionei 4 arquivos no Nemo no caminho /home/myUsername/.local/share/nemo/scripts/Folder with spaces/ . O Nemo armazena os caminhos de arquivos na variável de ambiente NEMO_SCRIPT_SELECTED_FILE_PATHS .

(Como você pode ver na resposta de glenn jackman abaixo, NEMO_SCRIPT_SELECTED_FILE_PATHS contém uma lista separada por novas linhas de caminhos de arquivos.)

Por que "Yeah!" não é impresso depois de cada linha de caminho de arquivo? Como posso conseguir isso? (Esta questão é talvez irritante, porque eu inicialmente pensei que esta lista de caminhos de arquivos é uma matriz, o que obviamente não é.)

SCRIPT

#!/bin/bash

for i in "${NEMO_SCRIPT_SELECTED_FILE_PATHS[@]}"
do
    echo "$i"
    echo "Yeah!"
done

OUTPUT

/home/myUsername/.local/share/nemo/scripts/Folder with spaces/script1
/home/myUsername/.local/share/nemo/scripts/Folder with spaces/script2
/home/myUsername/.local/share/nemo/scripts/Folder with spaces/script3
/home/myUsername/.local/share/nemo/scripts/Folder with spaces/script4

Yeah!
    
por stackunderflow 20.07.2016 / 16:14

1 resposta

6

Assumindo:

  • a variável de ambiente $NEMO_SCRIPT_SELECTED_FILE_PATHS é magicamente configurada para você pelo nemo e
  • contém uma lista de nomes de arquivos separados por nova linha,

você pode analisá-lo em uma matriz bash como esta:

$ NEMO_SCRIPT_SELECTED_FILE_PATHS="file one
file two
file three"

$ mapfile -t files <<<"$NEMO_SCRIPT_SELECTED_FILE_PATHS"

$ echo ${#files[@]}
3

$ printf ">>%s\n" "${files[@]}"
>>file one
>>file two
>>file three

mapfile é um comando embutido bash que lê entrada padrão, divide em novas linhas e armazena as linhas na matriz nomeada.

Isso quebra se qualquer um dos seus nomes de arquivo contiver novas linhas (que é um caractere de nome de arquivo válido).

    
por 20.07.2016 / 16:30