如何在Bash脚本中向函数传递不同目录的文件路径参数?
解决Bash函数参数传递为空的问题
别急,问题其实很简单——你在函数里引用参数的方式不对!Bash 函数中,传入的第一个参数是用 $1 来引用的,而不是你自定义的 $arg(除非你自己把 $1 赋值给 $arg)。
修正后的代码
#!/bin/bash myfile=/home/$USER/Desktop/Programs/Files/asd.bam function mate() { # 用 $1 接收传入的第一个参数 samtools index "$1" echo "$1" } # 调用函数时传入变量 mate "$myfile"
关键解释
- Bash 函数的参数规则和脚本本身的参数规则一致:第一个参数是
$1,第二个是$2,所有参数可以用$@表示。 - 给变量和参数加双引号
"是个好习惯,能避免文件名包含空格等特殊字符时出现错误。 - 如果非要用
$arg这个变量名,也可以在函数开头加一句arg="$1",之后再用$arg引用。
额外小提示
如果想确保函数被调用时确实传入了参数,可以在函数开头加个简单的检查:
function mate() { if [ -z "$1" ]; then echo "错误:请传入文件路径参数" return 1 fi samtools index "$1" echo "$1" }
内容的提问来源于stack exchange,提问作者Saruman
相关产品推荐
相关产品推荐

