我在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
答案 0 :(得分:2)
问题在于分词与参数扩展的操作顺序
它适用于eval
:
eval "$C"
这很快就变得非常棘手。处理不包含管道或其他重定向的动态命令的最佳方法是使用数组:
C=(bash -c "bash -c 'ls'")
"${C[@]}"