shell的位置参数未按预期工作

问题描述 投票:-1回答:3

我正在尝试学习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

$
linux bash command
3个回答
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,因此脚本名称之后的任何内容都将成为命令行参数。

默认的命令行参数分隔符是“ space”,因此当您第一秒钟输入./foo.sh时,bash首先将其存储在$ 1中,然后将其存储在$ 2中。

如果输入:

./foo.sh first second third FOURTH fifth

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


0
投票

您的脚本命名为'new'吗?在这种情况下,请按以下步骤运行它,您将了解其工作原理:

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

0
投票

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

../ new arguments1 arguments2

© www.soinside.com 2019 - 2024. All rights reserved.