本文介绍了/bin/bash -c与直接执行命令有何不同?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我很好奇命令的原因:

for f in `/bin/ls /mydir | sort | tail -n 10`; do echo $f; done;

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

Outputs the last ten files in /mydir, but

/bin/bash -c "for f in `/bin/ls /mydir | sort | tail -n 10`; do echo $f; done;"

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

Outputs "syntax error near unexpected token '[file in /mydir]'"

推荐答案

您正在使用双引号,因此,父外壳会在将参数传递给/bin/bash 之前对反引号和变量进行插值.

You are using double-quotes, so the parent shell is interpolating backticks and variables before passing the argument to /bin/bash.

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

Thus, your /bin/bash is receiving the following arguments:

-c "for f in x
y
z
...
; do echo ; done;"

这是语法错误.

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

To avoid this, use single quotes to pass your argument:

/bin/bash -c 'for f in `/bin/ls /mydir | sort | tail -n 10`; do echo $f; done;'

这篇关于/bin/bash -c与直接执行命令有何不同?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-04 12:42
查看更多