/ bin/bash -c与直接执行命令有什么不同?

Jiv*_*ara 5 bash

我很好奇为什么这个命令:

for f in `/bin/ls /mydir | sort | tail -n 10`; do echo $f; done;
Run Code Online (Sandbox Code Playgroud)

输出/ mydir中的最后十个文件,但是

/bin/bash -c "for f in `/bin/ls /mydir | sort | tail -n 10`; do echo $f; done;"
Run Code Online (Sandbox Code Playgroud)

输出"意外令牌附近的语法错误"[文件在/ mydir]'"

nne*_*neo 7

您正在使用双引号,因此父shell在传递参数之前插入反引号和变量/bin/bash.

因此,您/bin/bash收到以下参数:

-c "for f in x
y
z
...
; do echo ; done;"
Run Code Online (Sandbox Code Playgroud)

这是一个语法错误.

要避免这种情况,请使用单引号传递您的参数:

/bin/bash -c 'for f in `/bin/ls /mydir | sort | tail -n 10`; do echo $f; done;'
Run Code Online (Sandbox Code Playgroud)