如何在zsh/bash脚本中向函数传递参数?

如何在zsh/bash脚本中向函数传递参数?,bash,encryption,sh,getopts,Bash,Encryption,Sh,Getopts,我试图在一个脚本中结合这两个函数。其思想是传递标志-E进行加密,传递-D进行解密。到目前为止,旗子还在发挥作用。我得到了加密、解密和帮助的不同用法。 问题:函数没有得到参数,我每次都会得到用法消息。 如何将参数传递给函数? e、 g: /script.zsh-E filetoencript out.des3 #/usr/bin/env zsh #托多,把它写成剧本。标志-E进行加密-D进行解密。 #用法:$1=输入$2=输出 函数encrypt(){ 如果[-z“$1”];则 回显用法:加密“

我试图在一个脚本中结合这两个函数。其思想是传递标志-E进行加密,传递-D进行解密。到目前为止,旗子还在发挥作用。我得到了加密、解密和帮助的不同用法。 问题:函数没有得到参数,我每次都会得到用法消息。 如何将参数传递给函数? e、 g:

/script.zsh-E filetoencript out.des3
#/usr/bin/env zsh
#托多,把它写成剧本。标志-E进行加密-D进行解密。
#用法:$1=输入$2=输出
函数encrypt(){
如果[-z“$1”];则
回显用法:加密“”“[outfile]”
返回
fi
如果[-z“$2”];则
out=“$1”。des3
其他的
...
}
#用法:$1=输入$2=输出
函数解密(){
如果[-z“$1”];则
回显用法:解密“”“[outfile]”
返回
fi
如果[-z“$2”];则
...
}
函数main(){
#-E=加密
#-D=解密
#修理工
而getopts“:E:D:”opt;do
案例$opt-in
(E)
加密
;;
(D)
解密
;;
*)
帮助
出口1
;;
以撒
完成
}
主“$@”
解决方案:

function main() {
# -E = encrypt
# -D = decrypt
while getopts ":E:D:" opt; do
  case $opt in
    E)
        shift
        encrypt "$@"
        ;;
    D)
        shift
        decrypt "$@"
        ;;
    *)
        help
        exit 1
        ;;
  esac
done
}

请删除
bash
zsh
标签。
shift;加密“$@”
每个函数都有自己的位置参数集<函数中的code>$1引用函数的第一个参数,而不是脚本的第一个参数。调用函数时,必须显式地将脚本参数传递给函数。非常感谢大家@乔丹的回答立刻解决了我的问题。
function main() {
# -E = encrypt
# -D = decrypt
while getopts ":E:D:" opt; do
  case $opt in
    E)
        shift
        encrypt "$@"
        ;;
    D)
        shift
        decrypt "$@"
        ;;
    *)
        help
        exit 1
        ;;
  esac
done
}