【问题标题】:UNIX - why doesn't $# include the command (thus always being >= 1)?UNIX - 为什么 $# 不包含命令(因此总是 >= 1)?
【发布时间】:2015-10-25 14:25:57
【问题描述】:

由于$# 似乎无法在搜索引擎上正确搜索,因此很难找到答案。我很好奇为什么argv 通常包含命令名称本身,而$# 不包含。

为了更清楚,如果我有一个名为 testing.sh 的脚本

#!/bin/bash
echo $#

./testing.sh 返回 0 而不是 1。为什么?

【问题讨论】:

  • 顺便说一句,将来,您可能会标记此类问题sh 而不是bash - 因为它存在于 POSIX sh 中,标准 bash 主要试图遵守(就像 ksh, ash/dash 等)。带有 Bash 标签的问题往往只会被那些了解 bash 的人查看,而熟悉 ksh 或 POSIX sh 本身但不熟悉 bash 扩展的人通常也会查看带有 sh 标签的问题。

标签: bash unix arguments


【解决方案1】:

bash 关注POSIX specification for $#

扩展为位置参数的十进制数。命令名(参数0)不计入'#'给出的数字,因为它是一个特殊参数,不是位置参数。

shell 的参数接口与 C 的接口完全不同。在bash 术语中,您可以定义

argv=( "$0" "$@")
argc=${#argv[@]}

因为 shell(明智地)将命令名称与命令的参数分开。

【讨论】:

    猜你喜欢
    • 2010-10-01
    • 2017-04-03
    • 1970-01-01
    • 1970-01-01
    • 2013-09-05
    • 1970-01-01
    • 2016-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多