![将两个命令连接成一个命令](https://linux22.com/image/1034642/%E5%B0%86%E4%B8%A4%E4%B8%AA%E5%91%BD%E4%BB%A4%E8%BF%9E%E6%8E%A5%E6%88%90%E4%B8%80%E4%B8%AA%E5%91%BD%E4%BB%A4.png)
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
答案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