variables no bash

0
for i in *.jpg
do
    j = '$i | cut -d . -f 1'
    convert $i $j".png"
done

temp.sh: linha 3: j: comando não encontrado

Eu sei sobre mogrify, só queria saber como fazer variáveis no bash.

    
por Shabeer Naha 15.04.2011 / 07:35

4 respostas

1

Você precisa remover os espaços em torno de = :

for i in *.jpg
do
    j='echo $i | cut -d . -f 1'
    convert $i $j".png"
done
    
por bmk 15.04.2011 / 07:39
2

Você também pode usar a expansão de parâmetro integrada do bash para remover primeiro ponto e tudo depois dele: j="${i%%.*}"

Se você quiser remover o último ponto e qualquer coisa após ele (ou seja, a extensão do arquivo), use: j="${i%.*}"

Exemplo:

$ i="file.with.dots.ext"
$ echo "${i%%.*}"
file
$ echo "${i%.*}"
file.with.dots
    
por glenn jackman 15.04.2011 / 12:39
1

Além disso, seu script não funcionará como esperado se qualquer nome de arquivo contiver qualquer caractere especial (como um espaço). Você deve adquirir o hábito de sempre incluir referências de variáveis entre aspas duplas. Tente isto:

for i in *.jpg
do
    j="$(echo "$i" | cut -d . -f 1)"
    convert "$i" "${j}.png"
done
    
por Scott Severance 15.04.2011 / 07:53
0

Integração expansão do parâmetro bash e aspas duplas para arquivos com caracteres especiais em seus nomes, e o código simplifica também:

for f in *.jpg; do 
    convert "$f" "${f%.*}.png"
done
    
por Keith Reynolds 05.01.2016 / 19:16