接続変数のファイル名

接続変数のファイル名

ftp mdeleteコマンドで使用するためにファイル名を関連付けようとしています。 mdeleteコマンドが機能するには、各ファイル名をスペースで区切る必要があります。 $i変数がループ内にあり、$ FILESTODELETEにすでに存在するファイル名に加えて、$ iにあるファイル名を$ FI​​LESTODELETEに割り当てようとします。

  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から返されます)である配列を作成し*、2行目はスペースでfiles_to_delete区切られた文字列(デフォルトは仮定$IFS)に展開されます。

または、POSIX 準拠のシェルを使用して変数を完全に回避し、次を使用することもできます。

mdelete $(echo *)

関連情報