【问题标题】:How to stop a bash for loop from executing for an empty list如何阻止 bash for 循环执行空列表
【发布时间】:2018-06-06 01:58:16
【问题描述】:

我正在使用一个简单的 bash 脚本从 FTP 服务器读取文件,转换为 dos 格式,然后移动到另一个文件夹:

#!/bin/bash

SOURCE="$1"
DESTINATION="$2"

# Use globbing to grab list of files
for x in $1/*.txt; do
 f=$(basename $x)
 todos $x
 echo "Moving $x to $DESTINATION/$f"
 mv $x $DESTINATION/$f
done

一个非常简单的问题 - 当没有要移动的 txt 文件时如何停止循环执行?

【问题讨论】:

标签: bash


【解决方案1】:

bash shell 有一个 nullglob shell 选项,它会导致不匹配的 shell glob 扩展为空:

#!/bin/bash

source=$1
target=$2

shopt -s nullglob

for name in "$source"/*.txt; do
    todos "$name"

    dest="$target/${name##*/}"
    printf 'Moving %s to %s' "$name" "$dest"
    mv -- "$name" "$dest"
done

我还冒昧地修复了您的代码,即使给定的目录名称中包含空格、换行符或 shell glob,或者以破折号开头的名称,它也能正常工作。

相关:

【讨论】:

    猜你喜欢
    • 2014-09-10
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 2022-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多