linux - stat 在命令行中起作用,但在传递给变量时不起作用

标签 linux bash ubuntu stat

我正在调试 bash 脚本(在 ubuntu 上),以使用 stat 获取图像文件 block 大小。 stat 的结果在命令行中是正确的,但在传递到变量中时不正确(就像在脚本中一样)。

如果我在命令行使用stat命令,我会得到我想要的( block 数,%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

关于linux - stat 在命令行中起作用,但在传递给变量时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55563421/

相关文章:

linux - 如何在 Linux 机器上部署 WAR 文件

linux - 如何将参数传递给 shell 脚本

使用 xampp (ubuntu) 时 php-linter 的 Php 可执行文件不工作

haskell - 如何将Yesod升级到最新版本?

python - 如何在运行时安装和导入 Python 模块?

c - 在 OSX 和 Ubuntu 上构建打补丁的 64 位 OpenSSL

java - 如何在命令行上使用不同版本的 Java

regex - 将输出与正则表达式进行比较时,如何在 bash 中保留换行符?

bash - 查找子目录中的最大文件数

java - Tomcat无法连接8005端口