以下を実行する関数を作成する必要があります。関数は次の形式のファイル名を受け取ります。*.station
単語間に複数のスペースがある可能性があるため、単語間に余分なスペースを削除して1つだけ残したいと思います。
たとえば、(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}"