我需要编写一个执行以下操作的函数:该函数接收具有此格式的文件名*.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}"