Bash执行bash命令

时间:2016-05-26 13:00:32

标签: bash

我在bash中运行bash命令时遇到问题。

简单:

C="ls"
$C

作品

angel@php56:/tmp$ C="ls"
angel@php56:/tmp$ $C
testFile1

并发

C="bash -c \"ls\""
$C

作品

angel@php56:/tmp$ C="bash -c \"ls\""
angel@php56:/tmp$ $C
testFile1

更复杂

C="bash -c \"bash -c 'ls'\""
$C

不起作用

angel@php56:/tmp$ C="bash -c \"bash -c 'ls'\""
angel@php56:/tmp$ $C
-c: line 0: unexpected EOF while looking for matching `"'
-c: line 1: syntax error: unexpected end of file

C="bash -c \"bash -c \\\"ls\\\"\""

相同
angel@php56:/tmp$ C="bash -c \"bash -c \\\"ls\\\"\""                                                                                                                                                                                               
angel@php56:/tmp$ $C                                                                                                                                                                                                                               
-c: line 0: unexpected EOF while looking for matching `"'                                                                                                                                                                                          
-c: line 1: syntax error: unexpected end of file

为什么我可以在bash中运行bash,但是无法在bash中使用bash进行bash :) 可能是引用的东西?在线代码:click

1 个答案:

答案 0 :(得分:2)

问题在于分词与参数扩展的操作顺序 它适用于eval

eval "$C"

这很快就变得非常棘手。处理不包含管道或其他重定向的动态命令的最佳方法是使用数组:

C=(bash -c "bash -c 'ls'")
"${C[@]}"