【问题标题】:How do I pass arguments to my functions in a zsh/bash script?如何在 zsh/bash 脚本中将参数传递给我的函数?
【发布时间】:2020-07-10 17:40:43
【问题描述】:

我正在尝试将这两个函数组合在一个脚本中。这个想法是传递标志 -E 来加密, -D 来解密。到目前为止,这些标志正在起作用。我得到了加密、解密和帮助的不同用法。 问题:函数没有得到参数,我每次都得到使用消息。 如何将参数传递给函数? 例如:

./cript.zsh -E filetoencript out.des3
#!/usr/bin/env zsh

# TODO, make it a script. Flags -E to encrypt -D to decrypt.
# Usage: $1 = input $2 = output
function encrypt() {
  if [ -z "$1" ]; then
    echo Usage: encrypt '<infile>' '[outfile]'
    return
  fi
  if [ -z "$2" ]; then
    out="$1".des3
  else
   
...

}

# Usage: $1 = input $2 = output
function decrypt() {
  if [ -z "$1" ]; then
    echo Usage: decrypt '<infile>' '[outfile]'
    return
  fi
  if [ -z "$2" ]; then
    
...

}

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

main "$@"

【问题讨论】:

  • 请删除bashzsh 标签。
  • shift; encrypt "$@"
  • 每个函数都有其自己的组位置参数;函数中的$1 指的是函数 的第一个参数,而不是脚本的第一个参数。调用时必须将脚本参数显式传递给函数。
  • 非常感谢大家。 @jordanm answer 立即解决了我的问题。

标签: bash encryption sh getopts


【解决方案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
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-18
    • 2013-06-18
    • 2012-01-23
    • 2023-03-16
    • 2021-11-18
    • 2012-12-29
    相关资源
    最近更新 更多