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
。
默认情况下它不会打印换行符,因此将您的更改echo
为printf
应该可以删除不需要的换行符。
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