我在Terminal
中有以下变量echo $ VAR1
abc def<-以制表符
分隔
如何将其转换为
"abc"def"ghi"中间有一个空间吗?
在zsh
中,您可以使用
var1=$'abctdeftghi'
words=( "${(qqq)=var1}" )
,然后在需要时使用
将其转换回单个字符串var2="${words[*]}"
printf "%sn" "$var2" # prints "abc" "def" "ghi"
或者在不需要的时候跳过中间数组:
var2=${(A)${(qqq)=var1}}
假设变量包含实际的制表符(不是后面跟着"t"的反斜杠),您可以在展开变量时用" "
替换制表符(参见这里,在修饰符列表中向下),并在开始和结尾添加引号,如下所示:
""${VAR1//$'t'/" "}""
这里有一个相当复杂的引号和转义模式组合。开头和结尾的双引号使整个字符串成为双引号字符串,因此shell不会对其中的空白做任何奇怪的事情。其中的各种转义双引号都将被视为文字字符(因为它们是转义的),并且只是输出的一部分。模式字符串$'t'
处于ANSI-C引号模式,因此t
被转换为实际的制表符。
下面是几个使用它的例子:
% VAR1=$'abctdeftghi' # Define a variable with actual tab characters
% echo ""${VAR1//$'t'/" "}"" # Pass the converted version to a command
"abc" "def" "ghi"
% VAR2=""${VAR1//$'t'/" "}"" # Store converted version in another variable
% echo "$VAR2"
"abc" "def" "ghi"
这是你想要的
echo -e "abctdeftghitjhgtmnb" | sed -ne 's/t/" "/g; s/.*/"