关于-c选项,Bash的手册页说:
-c string如果-c存在该选项,则从中读取命令string.如果字符串后面有参数,则将它们分配给位置参数,从$0.
所以鉴于这个描述,我认为这样的事情应该有效:
bash -c "echo arg 0: $0, arg 1: $1" arg1
Run Code Online (Sandbox Code Playgroud)
但输出只显示以下内容,因此看起来-c字符串后的参数没有分配给位置参数.
arg 0: -bash, arg 1:
Run Code Online (Sandbox Code Playgroud)
我正在运行一个相当古老的Bash(在Fedora 4上):
[root @dd42 trunk] #bash --version GNU bash,version 3.00.16(1)-release(i386-redhat-linux-gnu)Copyright(C)2004 Free Software Foundation,Inc.
我真的想用参数执行一些shell脚本.我认为-c看起来非常有希望,因此上面的问题.我想知道使用eval,但我认为我不能将参数传递给eval之后的东西.我也对其他建议持开放态度.
我很好奇为什么这个命令:
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]'"