Bash 从字符串中删除空格

Bash 从字符串中删除空格,bash,Bash,假设我有这样一个字符串: string=" this is a string " 删除重复空白并获取以下字符串的最简单方法是什么: string="this is a string" 该行适用于给定的示例: awk '$1=$1' <<< $string awk'$1=$1'这一行应该适用于给定的示例: awk '$1=$1' <<< $string awk'$1=$1'逐个字符遍历字符串。每当获得两个连续的空格时,将数组向后移动一个

假设我有这样一个字符串:

string="   this    is a string     "
删除重复空白并获取以下字符串的最简单方法是什么:

string="this is a string"

该行适用于给定的示例:

awk '$1=$1' <<< $string

awk'$1=$1'这一行应该适用于给定的示例:

awk '$1=$1' <<< $string

awk'$1=$1'逐个字符遍历字符串。每当获得两个连续的空格时,将数组向后移动一个字符

逐个字符遍历字符串。每当获得两个连续的空白时,将数组向后移动一个字符

无需使用外部二进制文件,如Awk。你可以单独在Bash中完成

string="   this    is a string     "
IFS=' ' read -a __ <<< "$string"; string="${__[@]}"
echo "$string"
this is a string
或者只针对空格(
$'\x20'


不需要使用像Awk这样的外部二进制文件。你可以单独在Bash中完成

string="   this    is a string     "
IFS=' ' read -a __ <<< "$string"; string="${__[@]}"
echo "$string"
this is a string
或者只针对空格(
$'\x20'

使用echo的解决方案:

string=$(echo $string)
使用echo的解决方案:

string=$(echo $string)
让shell为您工作(假设
IFS
的默认值)

让shell为您工作(假设
IFS
的默认值)


比我的
sed-e的//^*//g'-e的//*$//g'
要好得多,它只解决了三部分中的两部分+1@FredrikPihl它可以更短,但是我们仍然需要
s/\+///g
谢谢!有没有一种不使用awk的方法来实现这一点?是的,其他工具,或者bash本身。我个人认为awk是最简单的@Doppelganger
cat比我的
sed-e的//^*//g'-e的//*$//g'
要好得多,它只解决了三部分中的两部分+1@FredrikPihl它可以更短,但是我们仍然需要
s/\+///g
谢谢!有没有一种不使用awk的方法来实现这一点?是的,其他工具,或者bash本身。我个人认为awk是最简单的@Doppelganger
catecho$string为我提供了
{{uu[@]}
bash版本4.2。45@FredrikPihl对不起,忘了美元。我将参数的名称从
string
。是的,我在点击send后2秒看到了这一点。数组和IFS变量的使用很好,但您必须同意awk解决方案更干净:-)@FredrikPihl只会更慢,并且需要一个子shell:)echo$string为我提供了
{uu[@}
bash 4.2版。45@FredrikPihl对不起,忘了美元。我将参数的名称从
string
。是的,我在点击send后2秒看到了这一点。数组和IFS变量的使用很好,但您必须同意awk解决方案更干净:-)@FredrikPihl速度较慢,并且需要一个子shell:)
string="   this    is a string     "
arr=($string)
printf -v string2 "%s" "${arr[*]}"
echo _${string2}_
_this is a string_