Я отлаживаю скрипт bash (на ubuntu), чтобы получить размер блока файла изображения, используя stat
. Результат от stat
верен в командной строке, но не при передаче в переменную (как в скрипте).
Если я использую команду stat
в командной строке, я получаю то, что хочу (количество блоков, %b):
stat --format=%b image.png
Вывод, например:
72
Но если я передам то же самое в переменную (в командной строке или в скрипте), вот так:
b = $(stat --format=%b image.png); echo $b
Я получаю этот вывод:
15:16:57 up 3:47, 0 users, load average: 0.52, 0.58, 0.59
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
Тем не менее, когда я «x проверяю» свой сценарий с помощью /bin/bash -x ../script.sh
, показано, что переменная b, определенная, как указано выше, за исключением того, что имя файла изображения передается как переменная, содержит это значение:
+ b = 328
15:47:39 up 4:18, 0 users, load average: 0.52, 0.58, 0.59
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
Что я пропустил?
Это мой сценарий:
#!/bin/bash
## Run in a folder containing image files to return the html <img /> links.
touch img_reflinks.html
generate_list ()
{
ls .| egrep '\.png|\.svg|.jpg|.jpeg|.tiff'
}
for f in $(generate_list)
do
str=''
style=''
# the filename prints correctly:
echo "$f"
# this is the problematic assignment, as in CL:
b = $(stat --format=%b "$f")
style = "\"width:" + "$b" + "px;\""
str = "<img src=\"" + "$f" + "\", style = " + "$style" + "/>\n"
echo "$str" >> img_reflinks.html
done
Пожалуйста, объясните отрицательные голоса, так как они полностью необоснованный. Спасибо.
в bash не допускаются пробелы вокруг знака = во время присваивания, поэтому это b=$(stat --format=%b "$f")
, а не b = $(stat --format=%b "$f")
В объявлении переменной не допускается пробел; поэтому вместо
b = $(stat --format=%b image.png); echo $b
делать
b=$(stat --format=%b image.png); echo $b
И вместо
ls .| egrep '\.png|\.svg|.jpg|.jpeg|.tiff'
делать :
for i in *.png *.svg *.jpg *.jpeg *.tiff; do
# ...
done
Разве вы не получаете кучу ошибок типа «команда не найдена» для этого скрипта?