本文介绍了/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与直接执行命令有何不同?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!