shell的位置参数无法按预期工作

时间:2014-10-25 19:53:24

标签: linux bash command

我正在尝试学习bash命令,并且一些非常基本的命令无法正常工作...... http://www.tutorialspoint.com/unix/unix-special-variables.htm

http://i.stack.imgur.com/F5VGK.png

脚本:

#!/bin/bash

name="john"
other="shawn"
echo $name
echo $other
echo $1
echo $2
echo $#
echo $@

输出:

$ new
john
shawn


0

$

3 个答案:

答案 0 :(得分:0)

$ 1,$ 2等,$#在bash脚本中有特殊含义。它们引用传递给bash脚本的参数,因此如果你在一个名为foo.sh的文件中有一个脚本,如:

#!/bin/bash
echo "Number of arguments: $#";
echo "First argument: $1";
echo "Second argument: $2";

如果你chmod + x foo.sh然后运行:

./foo.sh first second

你会看到:

Number of arguments: 2
First argument: first
Second argument: second

$ 1是指传递给脚本的第一个命令行参数。该脚本是foo.sh,因此脚本名称后面的任何内容都将成为命令行参数。

默认的命令行参数分隔符是“空格”,所以当你第一次输入./foo.sh时,bash首先存储到$ 1,第二个存储到$ 2。

如果您输入:

./foo.sh first second third FOURTH fifth

bash会在变量$ 3中存储第三个,在变量$ 4中存储四个,依此类推。

答案 1 :(得分:0)

您的脚本是否命名为“新”?在这种情况下,按如下方式逐一运行,您将了解其工作原理:

./new
./new a
./new a b

答案 2 :(得分:0)

运行脚本时,您没有传递任何参数。通过回显“ echo $#”来显示传递给脚本的参数数量。并且您的输出清楚地表明,“ echo $#”命令返回的计数为“ 0”。像下面这样调用脚本时,请传递参数

.//新arguments1参数2