я отладки Баш скрипт (на Ubuntu), чтобы получить размер блока файла изображения с помощью stat
. Результат от stat
правильно в командной строке, но не тогда, когда передается в переменную (как в сценарии).
Если я использую stat
команду в командной строке, я получаю то, что хочу (количество блоков,% б):
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
Тем не менее, когда я "проверяю" мой скрипт с помощью /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