连接变量中的文件名

连接变量中的文件名

我正在尝试连接文件名以在 ftp mdelete 命令中使用。每个文件名需要用空格分隔才能使 mdelete 命令起作用。 $i 变量处于循环中,除了 $FILESTODELETE 中已有的文件名之外,我还尝试将位于 $i 中的文件名分配给 $FILESTODELETE

  for i in `ls`
    do    
    $FILESTODELETE = "$FILESTODELETE $i "
        .....
     END
......     

mdelete $FILESTODELETE

答案1

set -- *
filenames="$*"

只要您没有修改 $IFS 的环境值,以上就是您将当前目录中所有非点文件的名称获取为单个字符串(以空格分隔并按任何语言环境排序)所需的全部内容。 POSIX 外壳。如果您修改了 $IFS,那么无论它的第一个字符是什么,都将替换为刚才提到的单个空格分隔符。

但请注意,上述内容并不能保证所述文件名不包含空格、换行符或基本上除 NUL 或 / 之外的任何字符 - 这些可能不在文件名中。

答案2

使用足够新的 ksh 版本(不确定到底有多新才足够新),您应该能够执行以下操作:

files_to_delete=( * )
...
mdelete ${files_to_delete[@]}

第一行创建files_to_delete一个数组,其元素是当前目录中的文件(由 glob 返回*),第二行扩展files_to_delete为以空格分隔的字符串(假设默认值为$IFS)。

或者,使用任何 POSIX 兼容 shell,您可以完全避免该变量,直接使用:

mdelete $(echo *)

相关内容