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

shi*_*333 1 unix linux bash shell

我一直试图用bash shell脚本进行一些练习但是我一直在使用$ 1变量引用我的脚本的第一个参数时遇到了麻烦.这是一个简单的脚本,它将文件作为参数并打印文件的名称.这是我的脚本:

#!/bin/bash

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

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

exit 0
Run Code Online (Sandbox Code Playgroud)

我尝试了以下命令:

./practice.sh -h somefile.txt
Run Code Online (Sandbox Code Playgroud)

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

Pes*_*The 6

$1in functions指的是传递给该函数的第一个位置参数,而不是传递给您的脚本.

因此,您必须再次将所需的参数传递给函数.你也告诉getopts你想要处理-h但是你正在检查-a你的case代替:

#!/bin/bash

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

while getopts "h:" opt; do
  case "$opt" in
     h) practice "${OPTARG}"
        ;;
  esac
done
Run Code Online (Sandbox Code Playgroud)