Linux 使用getopts时传递给函数时命令行参数不起作用
我一直在尝试练习bashshell脚本,但在使用$1变量引用脚本的第一个参数时遇到了问题。这是一个简单的脚本,它将文件作为参数并打印文件名。这是我的剧本: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
#!/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。