переменные в Bash

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

temp.sh: строка 3: j: команда не найдена

Я знаю о mogrify, просто хотел узнать, как сделать переменные в bash.

0
задан 15 April 2011 в 09:35

4 ответа

Вы должны удалить пробелы вокруг =:

for i in *.jpg
do
    j=`echo $i | cut -d . -f 1`
    convert $i $j".png"
done
0
ответ дан 15 April 2011 в 09:35

Вы также можете использовать расширение встроенного параметра bash , чтобы удалить первую точку и все после нее: j="${i%%.*}"

Если вы хотите удалить последнюю точку и все, что следует за ним (то есть расширение файла), используйте: j="${i%.*}"

Пример:

$ i="file.with.dots.ext"
$ echo "${i%%.*}"
file
$ echo "${i%.*}"
file.with.dots
0
ответ дан 15 April 2011 в 09:35

Интеграция расширения параметра bash и двойных кавычек для файлов со специальными символами в именах, и код также упрощается:

for f in *.jpg; do 
    convert "$f" "${f%.*}.png"
done
0
ответ дан 15 April 2011 в 09:35

Кроме того, ваш скрипт не будет работать должным образом, если какое-либо имя файла содержит какой-либо специальный символ (например, пробел). Вы должны иметь привычку всегда заключать ссылки на переменные в двойные кавычки. Попробуйте это:

for i in *.jpg
do
    j="$(echo "$i" | cut -d . -f 1)"
    convert "$i" "${j}.png"
done
0
ответ дан 15 April 2011 в 09:35

Другие вопросы по тегам:

Похожие вопросы: