Stat работает в командной строке, но не при передаче в переменную

Я отлаживаю скрипт 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

Разве вы не получаете кучу ошибок типа «команда не найдена» для этого скрипта?

that other guy 07.04.2019 22:34

Пожалуйста, объясните отрицательные голоса, так как они полностью необоснованный. Спасибо.

MCC 11.04.2019 22:39

в bash не допускаются пробелы вокруг знака = во время присваивания, поэтому это b=$(stat --format=%b "$f"), а не b = $(stat --format=%b "$f")

Scott Stensland 23.08.2021 21:31
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
203
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В объявлении переменной не допускается пробел; поэтому вместо

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

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