Bash 如何在一行中从命令输出字符串中删除已知的最后一部分?

Bash 如何在一行中从命令输出字符串中删除已知的最后一部分?,bash,string-substitution,command-substitution,Bash,String Substitution,Command Substitution,我想在同一行中使用Bash命令替换和字符串替换 我的实际命令更长,但在这里使用echo的荒谬用法只是对简短的一种“替代”,其行为相同——错误相同;) 我知道我们可以使用Bash命令生成它的输出字符串作为另一个命令的参数,如下所示: echo "$(echo "aahahah</ddd>")" aahahah</ddd> var="aahahah</ddd>"; echo "${var%</ddd>}" aahahah echo“$(echo“啊

我想在同一行中使用Bash命令替换和字符串替换

我的实际命令更长,但在这里使用echo的荒谬用法只是对简短的一种“替代”,其行为相同——错误相同;)

我知道我们可以使用Bash命令生成它的输出字符串作为另一个命令的参数,如下所示:

echo "$(echo "aahahah</ddd>")"
aahahah</ddd>
var="aahahah</ddd>"; echo "${var%</ddd>}"
aahahah
echo“$(echo“啊哈”)”
啊哈
我还知道我们可以删除字符串的最后一个已知部分,如下所示:

echo "$(echo "aahahah</ddd>")"
aahahah</ddd>
var="aahahah</ddd>"; echo "${var%</ddd>}"
aahahah
var=“aahahah”;回显“${var%}”
啊哈
我试图编写一个命令,其中一个命令给出一个字符串输出,我想删除最后一部分,这是已知的

echo "${$(echo "aahahah</ddd>")%</ddd>}"
-bash: ${$(echo "aahahah</ddd>")%</ddd>}: bad substitution
echo“${$(echo“aahahaha”)%}”
-bash:${$(echo“aahahah”)%}:错误的替换
它可能是事情发生的顺序,或者替换只对变量或硬编码字符串有效。但我怀疑只有我遗漏了什么,这是可能的

我如何让它工作?
为什么不工作?

像这样组合您的命令

var=$(echo "aahahah</ddd>")
echo ${var/'</ddd>'}
var=$(回声“aahahah”)
echo${var/''}

当使用
$word
或等效的
${word}
中的美元符号时,它要求
word
的内容。这称为参数扩展,如manbash所示

你可以写
var=“aahahah”;echo“${var%}”
:它展开
var
,并在返回值之前执行特殊的后缀操作

但是,您不能编写
echo“${$(echo“aahahahah”)%}”
,因为一旦计算了
$(echo“aahahah”)
,就没有什么可展开的了

manbash
(我的重点):

${参数%word}

删除匹配的后缀模式。这个词被扩展成一个词 模式与路径名扩展中的模式相同。如果模式 匹配参数扩展值的尾随部分,然后 展开的结果是参数的展开值 删除了最短的匹配模式(大小写为“%”)或最长的匹配模式(大小写为“%”)


谢谢是的,这是可行的,不用任何东西替换变量内容,但在我看来,这就像放弃了一行程序的梦想:我认为不可能根据需要将命令替换和字符串替换结合起来。如果决定使用单行程序,则可以使用
sed
而不是字符串替换:
echo“$(echo'aahahahah'| sed's:$:')”