Bash 命令替换与字符串替换
是否有可能按照以下思路做一些事情:Bash 命令替换与字符串替换,bash,command-substitution,Bash,Command Substitution,是否有可能按照以下思路做一些事情: echo ${$(ls)/foo/bar} 我很确定我在某处看到过类似的工作示例,但这会导致“错误替换”错误 我知道还有其他方法可以做到这一点,但这么短的一行代码会很有用。我是否遗漏了什么或这是不可能的?您可以将管道|与sed一起使用,例如: $ echo ABC | sed 's/B/_/' A_C 或变量替换,所有说明,尤其是在“变量扩展/子字符串替换”部分,下面是我的示例: $ var=ABC $ echo ${var//B/_} A_C 语法${
echo ${$(ls)/foo/bar}
我很确定我在某处看到过类似的工作示例,但这会导致“错误替换”错误
我知道还有其他方法可以做到这一点,但这么短的一行代码会很有用。我是否遗漏了什么或这是不可能的?您可以将管道
|
与sed
一起使用,例如:
$ echo ABC | sed 's/B/_/'
A_C
或变量替换,所有说明,尤其是在“变量扩展/子字符串替换”部分,下面是我的示例:
$ var=ABC
$ echo ${var//B/_}
A_C
语法
${…}
只允许引用变量(或位置参数),可以选择与组合
语法$(…)
(或者,不太理想的是,它的旧式等价物,`…`
)执行,这允许嵌入任意命令,将表达式扩展到其标准输出
因此,您可以将这两个功能组合如下:
echo "$(lsOutput=$(ls); echo "${lsOutput//foo/bar}")"
注意$(…)
的简单嵌套使用,这是比`…`
的主要优势之一,后者的使用需要在此处转义
也就是说,您在命令替换中定义的任何变量都被限制在命令运行的子shell中,因此您可以只使用一个生成所需输出的命令,因为只有stdout输出才是重要的
echo "$(ls | sed 's/foo/bar/')"
为什么不
root@localhost:~# echo `pwd`_whatever_suffix
/root_whatever_suffix
你到底想做什么?