위치 매개변수 인덱스를 인쇄/반향하는 방법

위치 매개변수 인덱스를 인쇄/반향하는 방법

위치 매개변수 값을 반영하는 작동하고 간단한 코드가 있습니다.

for i
do
echo "Argument = $i "
done

이는 스크립트의 실제 출력입니다.

Argument = --atleast-pkgconfig-version
Argument = 0.9.0

작업은 수행되지만 에코 출력에 인덱스를 추가하는 방법을 알아내려고 노력했습니다.

이건 작동하지 않아

cnt=1
for i
do
echo "Argument $cnt = $i "
((cnt++))
done

현재 코드는 작업을 수행하며 인덱스는 다음과 같이 케이크 위의 장식에 불과합니다.

Argument #1 = --atleast-pkgconfig-version
Argument #2 = 0.9.0

어떤 아이디어가 있나요?

업데이트 #1

나는 기본적으로 "5분 안에 편집" 시간 제한을 피하기 위해 이것을 텍스트 편집기 사본으로 게시했습니다.

#!/bin/sh 스크립트에서 두 코드를 모두 실행했습니다. 하나는 메인 스크립트에서 직접 실행되고, 두 번째는 표시된 대로 메인 스크립트에서 호출된 스크립트에서 실행됩니다. 두 코드 모두 기본 스크립트에서는 제대로 실행되지만 첫 번째 코드(원래 문제의 코드로 게시한 코드)는 보조 스크립트에서 실행되지 않습니다.

예, "더 이식성이 뛰어난" 코드가 문제를 해결합니다. 필요한 스크립트에서 올바르게 실행됩니다. 여전히 원래 질문("찾을 수 없음" 오류로 인해 실패하는 이유)에 대답하지 않습니다.

메인 스크립트
--exists glib-2.0                    0
--modversion glib-2.0                2.54.3
--exists --print-errors glib-2.0 >= 2.28    0
First code  - OK 
Argument #1 = dummy
Argument #2 = mt
Second code OK 
Argument #1 = dummy
Argument #2 = mt
도우미 스크립트

첫 번째 코드 – 실패

/usr/bin/arm-linux-gnueabihf-pkg-config: 19: /usr/bin/arm-linux-gnueabihf-pkg-config: cnt++: not found
Argument #1 = --print-errors
/usr/bin/arm-linux-gnueabihf-pkg-config: 19: /usr/bin/arm-linux-gnueabihf-pkg-config: cnt++: not found
Argument #1 = glib-2.0 >= 2.28
/usr/bin/a
두 번째 코드 – 잘 작동합니다
Argument #1 = --exists
Argument #2 = --print-errors
Argument #3 = glib-2.0 >= 2.28
첫 번째 코드
cnt=1
for i do
    echo "Argument #$cnt = $i"
    ((cnt++))
done
두 번째 코드
count=1
for arg do
    printf 'Argument #%d = %s\n' "$count" "$arg"
    count=$(( count + 1 ))
done

답변1

두 번째 예에서는 #런타임에 올바른 출력을 생성하기 위해 출력 문자열 중 하나만 필요합니다 bash.

cnt=1
for i do
    echo "Argument #$cnt = $i"
    ((cnt++))
done

이것은 일반적으로 실행을 사용하는 경우 작동하지 않습니다 /bin/sh. 특히 산술 평가 구문을 이해하지 못하는 쉘인 경우 /bin/sh(예: 쉘이 두 하위 쉘 세트 모두에서 문자열을 실행하려고 시도하면 위 코드에 대해 오류가 생성됩니다. 위의 코드를 사용해야 하는 경우 스크립트 상단의 라인을 사용하여 실행되는지 확인하세요.dash((...))dashcnt++: not found((cnt++))cnt++bash#!/bin/bash

최대의 이식성을 위해 다음을 사용할 수 있습니다.

count=1
for arg do
    printf 'Argument #%d = %s\n' "$count" "$arg"
    count=$(( count + 1 ))
done

xpg_echo또한 셸 옵션이 에서 활성화된 경우 백슬래시가 포함된 인수 관련 문제를 방지하고 bashPOSIX 구문을 사용하여 카운터를 증가시킵니다.

관련 정보