programing

함수 내에서 발신자의 명령줄 인수에 액세스하려면 어떻게 해야 합니까?

skycolor 2023. 4. 22. 09:09
반응형

함수 내에서 발신자의 명령줄 인수에 액세스하려면 어떻게 해야 합니까?

스크립트 명령줄 인수에 액세스하는 함수를 bash에 쓰려고 하는데 함수에 대한 위치 인수로 대체되었습니다.명령줄 인수가 명시적으로 전달되지 않은 경우 함수가 해당 인수에 액세스할 수 있는 방법이 있습니까?

# Demo function
function stuff {
  echo $0 $*
}

# Echo's the name of the script, but no command line arguments
stuff

# Echo's everything I want, but trying to avoid
stuff $*

C style(인수의수로는, 「C style(인수의 인수의 수)」를 합니다.$@ ★★★★★★★★★★★★★★★★★」$#.

$#는 인수의 수를 나타냅니다.
$@모든 인수를 제시합니다. 수 .args=("$@").

예를 들어 다음과 같습니다.

args=("$@")
echo $# arguments passed
echo ${args[0]} ${args[1]} ${args[2]}

에서는, 「」라고 하는 점에 주의해 주세요.${args[0]}는 스크립트의 이름이 아닌 첫 번째 인수입니다.

Bash Reference Manual을 읽었더니 이 내용은 BASH_ARGV로 캡처되어 있다고 합니다만, 「스택」에 대해서는 많은 것을 말하고 있습니다.

#!/bin/bash

shopt -s extdebug

function argv {
  for a in ${BASH_ARGV[*]} ; do
    echo -n "$a "
  done
  echo
}

function f {
  echo f $1 $2 $3
  echo -n f ; argv
}

function g {
  echo g $1 $2 $3
  echo -n g; argv
  f
}

f boo bar baz
g goo gar gaz

★★★★★★★★★★★★에 보존f.sh

$ ./f.sh arg0 arg1 arg2
f boo bar baz
fbaz bar boo arg2 arg1 arg0
g goo gar gaz
ggaz gar goo arg2 arg1 arg0
f
fgaz gar goo arg2 arg1 arg0
#!/usr/bin/env bash

echo name of script is $0
echo first argument is $1
echo second argument is $2
echo seventeenth argument is $17
echo number of arguments is $#

편집: 질문에 대한 내 의견을 참조하십시오.

Ravi의 코멘트가 본질적으로 정답이다.함수는 자체 인수를 사용합니다.명령줄 인수와 동일하게 하려면 해당 인수를 전달해야 합니다.그렇지 않으면 인수 없이 함수를 호출하는 것입니다.

즉, 명령줄 인수를 글로벌 배열에 저장하여 다른 함수에서 사용할 수 있습니다.

my_function() {
    echo "stored arguments:"
    for arg in "${commandline_args[@]}"; do
        echo "    $arg"
    done
}

commandline_args=("$@")

my_function

, 「」를 참조해 주세요.commandline_args 「」가 아닙니다), 「」$@,$1,$2등입니다만, 이용하실 수 있습니다.저는 인수 배열에 직접 할당하는 방법을 모릅니다만, 아는 사람이 있으면 가르쳐 주세요!

,, 금, 금, 지, 지, 지, 또, 또, 또, 또, 또, 또, also, also, also, also, also, also, also, also, also, also, also, also, also, also$@ 할 수 - 이렇게 하면 됩니다.

# Save the script arguments
SCRIPT_NAME=$0
ARG_1=$1
ARGS_ALL=$*

function stuff {
  # use script args via the variables you saved
  # or the function args via $
  echo $0 $*
} 


# Call the function with arguments
stuff 1 2 3 4

이렇게도 할 수 있다

#!/bin/bash
# script_name function_test.sh
function argument(){
for i in $@;do
    echo $i
done;
}
argument $@

이제 스크립트를 다음과 같이 호출합니다.

./function_test.sh argument1 argument2

이것은 몇 가지 코멘트가 포함된 @mcarifio 응답입니다.

#!/bin/bash

shopt -s extdebug

function stuff() {
  local argIndex="${#BASH_ARGV[@]}"
  while [[ argIndex -gt 0 ]] ; do
    argIndex=$((argIndex - 1))
    echo -n "${BASH_ARGV[$argIndex]} "
  done
  echo
}

stuff

강조하고 싶은 점:

shift 키워드(operator?)를 사용하여 반복할 수 있습니다.예:

#!/bin/bash
function print()
{
    while [ $# -gt 0 ]
    do
        echo "$1"
        shift 1
    done
}
print "$@"

저는 이렇게 합니다.

#! /bin/bash

ORIGARGS="$@"

function init(){   
  ORIGOPT= "- $ORIGARGS -" # tacs are for sed -E 
  echo "$ORIGOPT"
}

인수를 명령줄에서 특정 함수로 전달하는 가장 간단하고 가능성이 높은 방법은 인수를 함수 호출에 직접 포함하는 것입니다.

# first you define your function 
function func_ImportantPrints() {
    printf '%s\n' "$1" 
    printf '%s\n' "$2" 
    printf '%s\n' "$3" 
} 
# then when you make your function call you do this:  
func_ImportantPrints "$@" 

이는 인수를 메인 또는 func_parseArguments(앞의 예에서 보듯이 케이스 스테이트먼트를 포함하는 함수)와 같은 함수나 스크립트의 함수 중 하나에 송신하는 경우에 편리합니다.

언급URL : https://stackoverflow.com/questions/2740906/how-to-access-command-line-arguments-of-the-caller-inside-a-function

반응형