我正在调试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


但是,当我用/bin/bash -x ../script.sh“ x检查”我的脚本时,如上定义的变量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

最佳答案

变量声明中不允许有空格;所以代替

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

10-05 18:13
查看更多