Anexa algo a uma variável bash que contém a saída de comandos

1

Isso -

$a='ls' | do something | etc. | etc. | etc...
echo "$a"

dá isto -

file1
file2
file3

Mas eu quero acrescentar algo ao final dessa variável, então eu tentei

a=${a}\nfile4

Mas eu entendo isso -

file1
file2
file3nfile4   # wrong!
    
por lonix 11.06.2018 / 12:57

3 respostas

3

No Bash, você pode acrescentar a uma variável usando var+=value . Mas o seu problema não é isso, mas sim gerar a nova linha. A maneira mais fácil é usar $'..' quoting, que interpreta escape de barra invertida como \n para newline:

a+=$'\nfile4'
    
por 11.06.2018 / 13:42
1

você pode tentar com o eco:

a=$(echo -e "${a}\nfile")
    
por 11.06.2018 / 13:42
1

Se tudo o que você deseja fazer é obter a listagem de arquivos no diretório atual e, em seguida, anexar uma string a cada um desses nomes:

set -- *
printf '%s-somestring\n' "$@"

ou, usando uma matriz bash ,

names=( * )
printf '%s-somestring\n' "${names[@]}"

Usando uma matriz, a matriz de parâmetros posicionais (o primeiro exemplo acima, que funcionará em todas as shells POSIX), ou uma matriz bash , é a maneira mais segura de trabalhar com nomes de arquivos. Se você estiver convertendo os nomes de arquivos em algum tipo de string delimitada, você terá problemas quando tiver nomes de arquivos contendo qualquer caractere que tenha escolhido para delimitar a string.

Para apenas acrescentar algo ao final da saída , faça isso em um echo :

separado
# code that output something
# then,
echo 'additional data'

Ou, modificando meus exemplos acima:

set -- * 'additional data'
printf '%s\n' "$@"

e

names=( * 'additional data' )
printf '%s\n' "${names[@]}"

Ou ...

set -- *
set -- "$@" 'additional data'
printf '%s\n' "$@"

e

names=( * )
names+=( 'additional data' )
printf '%s\n' "${names[@]}"
    
por 11.06.2018 / 14:11