我很好奇为什么这个命令:
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]'"
您正在使用双引号,因此父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)