【发布时间】:2014-07-17 23:01:39
【问题描述】:
我知道$*、$@、"$@" 甚至${1+"@"} 以及它们的含义。
我需要从 shell 脚本访问 EXACT 命令行参数字符串。请注意示例中的引号。像“$@”这样的东西会保存参数但会删除引号,我不知道如何从中恢复。
例子:
./my-shell.sh "1 2" 3
而且我需要在不进行任何处理的情况下检索 EXACT 参数字符串:
“1 2”3
知道如何实现吗?
【问题讨论】:
-
您是否能够分别获取命令行参数
1 2和3?如果可以的话,只需将引号添加回第一个参数,然后将两个参数混在一起。 -
@RobertHarvey 但是在
"1 2" 3的情况下如何区分带引号和不带引号的参数?我只需要'原始'字符串。如果我收到1 2 4,我真的需要1 2 4,而不是1 2 4。 -
如果
1 2被引用了,你难道不把它作为一个单独的参数吗? -
这本质上是不可能的,调用 shell 脚本的 shell 会解释命令行字符串并相应地将参数传递给 shell 脚本。换句话说,没有 Unix 程序可以访问调用它的确切命令行,只能访问命令行包含的参数。要看看它在实践中是如何工作的,我推荐
strace -fing 你的 shell,因为它会启动一个 shell 脚本;特别注意execve调用,它将子进程的控制权转移到脚本。