Linux 使用getopts时传递给函数时命令行参数不起作用

Linux 使用getopts时传递给函数时命令行参数不起作用,linux,bash,shell,unix,Linux,Bash,Shell,Unix,我一直在尝试练习bashshell脚本,但在使用$1变量引用脚本的第一个参数时遇到了问题。这是一个简单的脚本,它将文件作为参数并打印文件名。这是我的剧本: #!/bin/bash function practice() { echo "${1}" } while getopts "h:" opt; do case "$opt" in h) practice ;; esac done exit 0 我尝试了以下命令: ./practice.sh -h somefi

我一直在尝试练习bashshell脚本,但在使用$1变量引用脚本的第一个参数时遇到了问题。这是一个简单的脚本,它将文件作为参数并打印文件名。这是我的剧本:

#!/bin/bash

function practice() {
  echo "${1}"
}

while getopts "h:" opt; do
  case "$opt" in
  h) practice
     ;;
  esac
done

exit 0
我尝试了以下命令:

./practice.sh -h somefile.txt

由于某种原因,它返回一个空行。有什么想法吗?

函数中的$1指的是传递给该函数的第一个位置参数,不是传递给脚本的

因此,您必须再次将想要的参数传递给函数。您还告诉
getopts
您想要处理
-h
,但是您在
案例中检查
-a

#!/bin/bash

practice() {
   echo "${1}"
}

while getopts "h:" opt; do
  case "$opt" in
     h) practice "${OPTARG}"
        ;;
  esac
done

函数中的
$1
指传递给该函数的第一个位置参数,不是传递给脚本的

因此,您必须再次将想要的参数传递给函数。您还告诉
getopts
您想要处理
-h
,但是您在
案例中检查
-a

#!/bin/bash

practice() {
   echo "${1}"
}

while getopts "h:" opt; do
  case "$opt" in
     h) practice "${OPTARG}"
        ;;
  esac
done
如上所述,将命令行参数传递给函数


将命令行参数如上所述传递给函数。

除非OP特别想破坏引用,否则正确的构造是
“$@”
。除非OP特别想破坏引用,否则正确的构造是
“$@”
。谢谢,我现在明白我做错了什么。另外,选择a而不是h是我的错误;他们都应该是h。谢谢,我明白我现在做错了什么。另外,选择a而不是h是我的错误;他们都应该是h。