簡體   English   中英

如何使用 bash 腳本檢查參數的數量?

[英]How to check number of arguments using a bash script?

如何在腳本中格式化通過 bash 腳本傳遞的參數數量? 這是我目前所擁有的:

#!/bin/bash

echo "$# parameters"
echo "$@"

但我想格式化是使用一個函數,但每次運行它時,它都會作為 0 個參數返回:

#!/bin/bash

example()
{
 echo "$# parameters"; echo "$@";
}

example

我是否錯誤地考慮了這一點?

您沒有將參數傳遞給您的函數。

#! /bin/bash

EXE=`basename $0`

fnA()
{
    echo "fnA() - $# args -> $@"
}

echo "$EXE - $# Arguments -> $@"
fnA "$@"
fnA five six

輸出:

$ ./bash_args.sh one two three
bash_args.sh - 3 Arguments -> one two three
fnA() - 3 args -> one two three
fnA() - 2 args -> five six

使用function關鍵字是 POSIX 標准。 bash支持它以實現ksh兼容性。

編輯:根據戈登的評論引用"$@" - 這可以防止重新解釋引用字符串中的所有特殊字符

第二個應該有效。 以下是我每天使用的幾個具有相同功能的類似示例。

function dc() {
    docker-compose $@
}

function tf(){

  if [[ $1 == "up" ]]; then
    terraform get -update
  elif [[ $1 == "i" ]]; then
    terraform init
  else
    terraform $@
  fi
}

function notes(){
  if [ ! -z $1 ]; then
    if [[ $1 == "header" ]]; then
      printf "\n$(date)\n" >> ~/worknotes
    elif [[ $1 == "edit" ]]; then
      vim ~/worknotes
    elif [[ $1 == "add"  ]]; then
      echo "  • ${@:2}" >> ~/worknotes
    fi
  else
    less ~/worknotes
  fi
}

PS:OSX 我需要聲明function您可能不需要在其他操作系統(如 Ubuntu)上

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM