根据这个答案...
命令被拆分为名为参数的字符串数组。参数 0(通常)是命令名称,参数 1 是命令后面的第一个元素,依此类推。
$ ls -la /tmp /var/tmp arg0 = ls arg1 = -la arg2 = /tmp arg3 = /var/tmp
是否可以打印出每个参数……让我们用 echo 来表示。
我在执行命令后一直在使用echo $@
and ,但并没有真正起作用。echo $0 $1 $2 $3
ls -la /tmp /var/tmp
我也尝试过这个,> /dev/null
但没有效果。 (我得到的输出与下面完全相同)
user@linux:~$ ls -la /tmp /var/tmp > /dev/null
user@linux:~$ echo $@
user@linux:~$
user@linux:~$ ls -la /tmp /var/tmp > /dev/null
user@linux:~$ echo $0
bash
user@linux:~$
user@linux:~$ ls -la /tmp /var/tmp > /dev/null
user@linux:~$ echo $1
user@linux:~$
user@linux:~$ ls -la /tmp /var/tmp > /dev/null
user@linux:~$ echo $0 $1 $2 $3
bash
user@linux:~$
所需输出
我期望执行后在终端屏幕上看到以下输出ls -la /tmp /var/tmp
输入
ls -la /tmp /var/tmp
输出
arg0 = ls
arg1 = -la
arg2 = /tmp
arg3 = /var/tmp
答案1
echo $0 在您的示例中确实输出了“bash”。这是真的,因为当您在 shell 中时 bash 正在运行。
您想要访问的参数已提供给命令ls
。当它返回并且出现提示时,参数就消失了。
创建包含以下行的文件(“脚本”)后
echo $0 $1 $2
并通过采购来调用它:
. myecho.cmd a b c d
...你得到:
bash a b
将其设为可执行文件后(添加 #! 第一行、chmod、cp 到路径目录),您可以直接调用它:
myecho.cmd a b c d
现在 $0 是新命令的名称:
/usr/local/bin/myecho.cmd a b
(我称它为 .cmd 只是为了让它突出。只是不要称它为“echo”)