Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 命令替换与字符串替换_Bash_Command Substitution - Fatal编程技术网

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

你到底想做什么?