명령줄 인수를 Bash에서 배열로 변환
명령줄 인수를 bash 스크립트 배열로 변환하려면 어떻게 해야 합니까?
이거 가져가고 싶다.
./something.sh arg1 arg2 arg3
로 변환합니다.
myArray=( arg1 arg2 arg3 )
myArray를 사용하여 스크립트에서 더 사용할 수 있습니다.
이 이전 SO 투고는 거의 비슷하지만 어레이 작성 방법은 다루지 않습니다.Bash 명령줄 인수를 해석하려면 어떻게 해야 하나요?
인수를 일반 bash 스크립트 배열로 변환해야 합니다.다른 언어(Python 등)를 사용할 수 있지만 bash에서는 이 작업을 수행해야 합니다."추가" 기능이나 비슷한 기능을 찾고 있는 것 같습니다.
업데이트: 제로 인수를 확인하고 기본 어레이 값을 할당하는 방법도 묻고 싶습니다.다음 답변 덕분에 이 작업을 수행할 수 있었습니다.
if [ "$#" -eq 0 ]; then
myArray=( defaultarg1 defaultarg2 )
else
myArray=( "$@" )
fi
실제로 명령줄 인수는 사실상 배열과 같습니다.적어도 당신은 치료 할 수 있다$@
배열과 매우 유사합니다.즉, 다음과 같이 실제 어레이로 변환할 수 있습니다.
myArray=( "$@" )
인수를 몇 개 입력하고, 그것들을 에 입력해 주세요.$@
값, 사용set
:
$ set -- apple banana "kiwi fruit"
$ echo "$#"
3
$ echo "$@"
apple banana kiwi fruit
인수 구조를 사용하는 방법을 이해하는 것은 배열과 같은 다른 기능이 없는 POSIX sh에서 특히 유용합니다.
이 방법이 도움이 될 수 있습니다.
myArray=("$@")
또한 'in'을 생략하여 인수를 반복할 수도 있습니다.
for arg; do
echo "$arg"
done
동등할 것이다
for arg in "${@}"; do
echo "$arg"
done
실제로 파라미터 목록은$1 $2 ...
기타.
이는 정확히 다음과 같습니다.
${!i}
따라서 파라미터 목록은 세트에 따라 변경될 수 있습니다.
그리고.${!i}
올바른 액세스 방법:
$ set -- aa bb cc dd 55 ff gg hh ii jjj kkk lll
$ for ((i=0;i<=$#;i++)); do echo "$#" "$i" "${!i}"; done
12 1 aa
12 2 bb
12 3 cc
12 4 dd
12 5 55
12 6 ff
12 7 gg
12 8 hh
12 9 ii
12 10 jjj
12 11 kkk
12 12 lll
특정의 경우, 이것을 사용해(배열은 불필요), 아무것도 지정되어 있지 않은 경우의 인수 리스트를 설정할 수 있습니다.
if [ "$#" -eq 0 ]; then
set -- defaultarg1 defaultarg2
fi
즉, 다음과 같은 간단한 표현입니다.
[ "$#" == "0" ] && set -- defaultarg1 defaultarg2
다른 사용법을 다음에 나타냅니다.
#!/bin/bash
array=( "$@" )
arraylength=${#array[@]}
for (( i=0; i<${arraylength}; i++ ));
do
echo "${array[$i]}"
done
간단한 조작은 물론,$@
;)
arg 목록을 프롬프트에서 직접 전달하는 방법은 다음과 같습니다.
function echoarg { for stuff in "$@" ; do echo $stuff ; done ; }
echoarg Hey Ho Lets Go
Hey
Ho
Lets
Go
큰따옴표의 중요성은 강조할 가치가 있다.인수에 공백이 있다고 가정합니다.
코드:
#!/bin/bash
printf 'arguments:%s\n' "$@"
declare -a arrayGOOD=( "$@" )
declare -a arrayBAAD=( $@ )
printf '\n%s:\n' arrayGOOD
declare -p arrayGOOD
arrayGOODlength=${#arrayGOOD[@]}
for (( i=1; i<${arrayGOODlength}+1; i++ ));
do
echo "${arrayGOOD[$i-1]}"
done
printf '\n%s:\n' arrayBAAD
declare -p arrayBAAD
arrayBAADlength=${#arrayBAAD[@]}
for (( i=1; i<${arrayBAADlength}+1; i++ ));
do
echo "${arrayBAAD[$i-1]}"
done
출력:
> ./bash-array-practice.sh 'The dog ate the "flea" -- and ' the mouse.
arguments:The dog ate the "flea" -- and
arguments:the
arguments:mouse.
arrayGOOD:
declare -a arrayGOOD='([0]="The dog ate the \"flea\" -- and " [1]="the" [2]="mouse.")'
The dog ate the "flea" -- and
the
mouse.
arrayBAAD:
declare -a arrayBAAD='([0]="The" [1]="dog" [2]="ate" [3]="the" [4]="\"flea\"" [5]="--" [6]="and" [7]="the" [8]="mouse.")'
The
dog
ate
the
"flea"
--
and
the
mouse.
>
어레이와 $@의 실제 동일성을 나타내는 나란히 표시.
코드:
#!/bin/bash
echo "Dollar-1 : $1"
echo "Dollar-2 : $2"
echo "Dollar-3 : $3"
echo "Dollar-AT: $@"
echo ""
myArray=( "$@" )
echo "A Val 0: ${myArray[0]}"
echo "A Val 1: ${myArray[1]}"
echo "A Val 2: ${myArray[2]}"
echo "A All Values: ${myArray[@]}"
입력:
./bash-array-practice.sh 1 2 3 4
출력:
Dollar-1 : 1
Dollar-2 : 2
Dollar-3 : 3
Dollar-AT: 1 2 3 4
A Val 0: 1
A Val 1: 2
A Val 2: 3
A All Values: 1 2 3 4
언급URL : https://stackoverflow.com/questions/12711786/convert-command-line-arguments-into-an-array-in-bash
'itsource' 카테고리의 다른 글
Swift의 Documents 디렉토리에 파일이 있는지 확인하는 방법 (0) | 2023.04.17 |
---|---|
PowerShell에서 명령 실행 타이밍 설정 (0) | 2023.04.17 |
상각된 상수 시간 동안 R의 목록에 개체를 추가하시겠습니까, O(1)? (0) | 2023.04.17 |
Bash 이력에 명령어가 표시되지 않도록 하려면 어떻게 해야 합니까? (0) | 2023.04.17 |
로컬 파일을 생성하지 않고 OpenXML을 사용하여 Excel 파일을 생성하는 방법은 무엇입니까? (0) | 2023.04.17 |