【问题标题】:bash script trying to list files unsuccessfullybash 脚本试图列出文件失败
【发布时间】:2022-10-15 17:55:43
【问题描述】:

我正在从文本文件中读取一些文件路径和名称,并尝试测试文件是否存在。我不确定我做错了什么,但首先 echo 返回文件路径和文件名,而 if 语句中的 echo 没有。有任何想法吗?

#!/bin/bash
while read line; do
    echo $line
    if [ -f "$line" ]; then
        echo "found: $line"
    fi
done < /mbackup/temp/images.txt

【问题讨论】:

  • if 语句中的 echo 打印什么?
  • grep -c $'\r' /mbackup/temp/images.txt - 你得到0 吗?
  • @bubbles,你是说你没有从任何文件的第二个回显中得到输出,还是你得到'found:'并且没有填充 $line 的值?我只能在文件的全路径名中想象一些意想不到的字符。

标签: bash


【解决方案1】:

唯一的变化是添加-r阅读的选项。该选项记录为:

反斜杠不充当转义字符。反斜杠被认为是该行的一部分。特别是,反斜杠换行对可能不会用作续行。

这有助于防止文件名中的特殊字符干扰您的脚本。

我用包含特殊字符的文件对此进行了测试,它可以按您的预期工作。

#!/bin/bash
while read -r line; do
    echo $line
    if [ -f "$line" ]; then
        echo "found: $line"
    fi
done < /mbackup/temp/images.txt

【讨论】:

    猜你喜欢
    • 2014-03-13
    • 1970-01-01
    • 2014-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多