연결 변수의 파일 이름

연결 변수의 파일 이름

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 *)

관련 정보