Bash 为什么$#总是返回0?

Bash 为什么$#总是返回0?,bash,arguments,Bash,Arguments,我正在尝试编写一个脚本,它只接受一个参数。我还在学习,所以我不明白我的代码出了什么问题。我不明白为什么,即使我更改了输入的数量,代码也只是退出。(注意:我将在后面的if-then语句中使用$dir,但我没有包括它。) 可以使用重新检查语法 $#告诉您使用多少参数调用脚本。 这里你有两个选择 选项1:使用参数 #!/bin/bash if [[ $# -ne 1 ]] then echo "Script requires one and only one argument&q

我正在尝试编写一个脚本,它只接受一个参数。我还在学习,所以我不明白我的代码出了什么问题。我不明白为什么,即使我更改了输入的数量,代码也只是退出。(注意:我将在后面的if-then语句中使用$dir,但我没有包括它。)

可以使用重新检查语法

$#
告诉您使用多少参数调用脚本。 这里你有两个选择


选项1:使用参数

#!/bin/bash

if [[ $# -ne 1 ]]
then
    echo "Script requires one and only one argument"
    exit 1
else
    echo "ok, arg1 is $1"
fi
  • 要调用脚本,请执行以下操作:
    /script.bash参数
  • 使用测试条件()
  • 退出1
    :默认情况下,当存在状态代码为0的脚本时,表示它工作正常。因为这是一个错误,所以在这里指定一个非零值

选项2:不要使用参数,请用户输入值。
注意:这个版本根本不使用参数

#!/bin/bash

read -r -p "Specify the name of the directory: " dir
if [[ ! -d "$dir" ]]
then
    echo "Error, directory $dir does not exist."
    exit 1
else
    echo "ok, directory $dir exists."
fi
  • 要调用脚本,请执行以下操作:
    /script.bash
    ,不带任何参数
您应该研究bash教程以了解如何使用参数。

您可以使用它来仔细检查语法

$#
告诉您使用多少参数调用脚本。 这里你有两个选择


选项1:使用参数

#!/bin/bash

if [[ $# -ne 1 ]]
then
    echo "Script requires one and only one argument"
    exit 1
else
    echo "ok, arg1 is $1"
fi
  • 要调用脚本,请执行以下操作:
    /script.bash参数
  • 使用测试条件()
  • 退出1
    :默认情况下,当存在状态代码为0的脚本时,表示它工作正常。因为这是一个错误,所以在这里指定一个非零值

选项2:不要使用参数,请用户输入值。
注意:这个版本根本不使用参数

#!/bin/bash

read -r -p "Specify the name of the directory: " dir
if [[ ! -d "$dir" ]]
then
    echo "Error, directory $dir does not exist."
    exit 1
else
    echo "ok, directory $dir exists."
fi
  • 要调用脚本,请执行以下操作:
    /script.bash
    ,不带任何参数

您应该研究bash教程,了解如何使用参数。

为什么在检查参数数量之前要进行提示?您如何调用此脚本?如果删除提示并执行读取操作,会发生什么情况?你觉得测试怎么样?$#旁注:与echo/read不同,
bash
让你一次完成所有任务:
read-r-p“prompt text here”dir
这里有误解吗
$#
read
无关-它是整个脚本的参数数。如果运行
/foo.bash-aye“bee-bee”cee
,则脚本中的
$#
将等于3。在脚本的第一行或最后一行,除非使用例如
set
shift
覆盖参数列表。为什么在检查参数数量之前要提示?您如何调用此脚本?如果删除提示并执行读取操作,会发生什么情况?你觉得测试怎么样?$#旁注:与echo/read不同,
bash
让你一次完成所有任务:
read-r-p“prompt text here”dir
这里有误解吗
$#
read
无关-它是整个脚本的参数数。如果运行
/foo.bash-aye“bee-bee”cee
,则脚本中的
$#
将等于3。在脚本的第一行或最后一行,除非使用例如
set
shift
覆盖参数列表。