我正在尝试连接文件名以在 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 *)