将两个命令连接成一个命令

将两个命令连接成一个命令
while read pos; do
string1= echo $pos | cut -c 20-38
string2="=$pos"
string3="$string1 $string2"
echo "$string3"
done < file

这是我的脚本代码。我想在一行中显示输出,但输出却出现在不同的行上。

pos = abcdefghi1234567890QWERTYUXY.tar.gz
string1 = 1234567890QWERTYUXY
string2 = abcdefghi1234567890QWERTYUXY.tar.gz

所需输出:

1234567890QWERTYUXY abcdefghi1234567890QWERTYUXY.tar.gz

但是这两个字符串显示在两行不同的地方。我想将输出显示在一行中。

答案1

进行一些更改后它应该可以正常工作:
通常,当您像在 echo 中那样使用变量时,原始变量将保持原样,因此完全没有必要使用字符串 2。此外,我习惯使用花括号来{括起}变量,以便可以在文本中直接引用它们,花括号用于分隔变量名称,只需将美元符号放在前面即可(示例如下)。

1- 首次设置 string1 时,请勿在等号两侧添加空格。2-
将命令的结果分配给变量时,必须强制执行该命令,命令周围的单个反勾号(美国键盘上 #1 键左侧的字符)可执行此操作。3-
注意剪切的字符数,您的代码和示例不一致。因此该行应如下所示:

string1=`echo $pos | cut -c 20-38`

另一件事是,当你从另一个值设置一个值时,不要包含额外的等号。因此设置 string2 的代码应如下所示:

string2="$pos"

我相信以下内容将按照您的要求进行,我调整了字符数以提供示例的输出:

我的测试的输入“文件”包含:
abcdefghi1234567890QWERTYUXY.tar.gz

我的脚本是:

 #!/bin/sh
while read pos; do
string1=`echo ${pos} | cut -c 10-28`
echo "${string1} ${pos}"
done < file

输出如下所示:
1234567890QWERTYUXY abcdefghi1234567890QWERTYUXY.tar.gz

我相信这正是您所要求的。

答案2

您可以通过管道传输输出sed,特别是:

echo "$string3" | sed ':a;N;$!ba;s/\n/ /g'

所有功劳若尔特·波蒂凯在 StackOverflow 上他的回答

答案3

Bash 具有强大的变量替换功能,可以让你免于创建额外的变量并连接到另一个命令。也许可以尝试以下方法

while read pos; do
  echo "${pos} ${pos%.tar.gz}"
done

一般形式是${var%Pattern}——从 $ 中删除与 后端匹配 的var最短部分。$Pattern$var

http://www.tldp.org/LDP/abs/html/parameter-substitution.html

相关内容