다음을 수행하는 함수를 작성해야 합니다. 함수는 다음 형식의 파일 이름을 받습니다.*.station
단어 사이에 공백이 여러 개 있을 수 있으므로 단어 사이에 추가 공백을 제거하고 하나만 남기고 싶습니다.
예를 들어 (1): aa__________a____aa _____________ ssd________.station
을(를) 다음으로 변경해야 합니다.aa_a_aa_ssd.station
(2): 다음 aa______________a.station
과 같이 작성해야 합니다.aa_a.station
_
(위의 밑줄( )은 공백을 나타냅니다.)
답변1
shopt -s extglob
file="aa a a.station"
echo mv "$file" "${file// +( )/ }"
또 다른 옵션은 루프하는 것입니다
"${file// / }"
한 칸만 남을 때까지:
file="a a"
last_run=""
new="$file"
while [ "$last_run" != "$new" ]; do
last_run="$new"
new="${last_run// / }"
done
echo mv "$file" "$new"
또는 분사를 사용하세요:
IFS=" "
mv "$file" "$(echo $file)"
답변2
#!/bin/bash
file="aa a a.station"
read -r -a myarray <<< "$file"
printf "${myarray[*]}"
이는 문자열을 표준 IFS 문자(공백, 탭, 줄 바꿈)로 분할된 배열로 읽습니다. 그러면 전체 배열이 인쇄되고 각 요소에는 이제 단일 구분 기호가 포함됩니다.
다음을 활용할 수도 있습니다 xargs
.
#!/bin/bash
file="aa a a.station"
newfile=$(echo $file|xargs)
printf "${newfile}"