避免在 shell 脚本中打印换行符

避免在 shell 脚本中打印换行符
while read pos; do 
     string1=`echo $pos | cut -c 20-38`
     string2="=$pos" 
     string3="$string1 $string2" 
     echo "$string3" 
done < file

这是我的脚本代码。我想在一行中显示输出,但输出却出现在不同的行上。我怎样才能做到这一点?

位置 = abcdefghi1234567890QWERTYUXY.tar.gz 字符串 1 = 1234567890QWERTYUXY 字符串 2 = abcdefghi1234567890QWERTYUXY.tar.gz

所需输出:

1234567890QWERTYUXY abcdefghi1234567890QWERTYUXY.tar.gz

答案1

首先,你的脚本中有多个拼写错误。除此之外,你可以使用

echo -n "$string3 "

打印变量string3,而不在其后添加换行符。

man echo

   -n     do not output the trailing newline

答案2

您想要tr -d '\n'在作业结束时使用$string1来删除文件中存在的换行符:

while read pos; do 
     string1=`echo $pos | cut -c 20-38 | tr -d '\n'`
     string2="=$pos" 
     string3="$string1 $string2" 
     echo "$string3" 
done < file

但请注意,这将给出输出:

QWERTYUXY.tar.gz =abcdefghi1234567890QWERTYUXY.tar.gz

以及pos = abcdefghi1234567890QWERTYUXY.tar.gz你给出的脚本。

答案3

有很多选择,但我推荐的方式是printf

默认情况下它不会打印换行符,因此将您的更改echoprintf应该可以删除不需要的换行符。

while read pos; do 
    string1=`printf "%s" $pos | cut -c 20-38`
    string2="=$pos" 
    string3="$string1 $string2" 
    printf "%s\n" "$string3" 
done < file

或者也许只是

while read pos; do 
    string1=`printf "%s" $pos | cut -c 20-38`
    string2="=$pos" 
    printf "%s=%s\n" "$string1" "$string2"
done < file

输出

1234567890QWERTYUXY=abcdefghi1234567890QWERTYUXY.tar.gz

也就是说,您的原始脚本也对我有用。

输出

1234567890QWERTYUXY abcdefghi1234567890QWERTYUXY.tar.gz

相关内容