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 호환 셸을 사용하여 변수를 완전히 피하고 다음을 사용할 수 있습니다.
mdelete $(echo *)