2010-05-26 3 views
1

내 쉘 스크립트에서쉘 스크립트에서 Perl 배열 요소를 처리하려면 어떻게해야합니까? 펄에서</p> <p>: 예를 들어

@array = (1,2,3); 

system ("/tmp/a.sh @array"); 

는 어떻게 쉘 스크립트에서이 배열을 처리하나요? 인수를 받기 위해 쉘 스크립트를 처리하는 방법과 쉘 스크립트에서 배열 변수를 사용하는 방법은 무엇입니까? 이 같은

+0

:

배쉬에서
#!/bin/sh # also works for Bash for arg # "in [email protected]" is implied do echo "$arg" done 

, 그들은 또한 배열 첨자 또는 슬라이스를 사용하여 액세스 할 수 있습니다 세부 묘사. "핸들"이란 무엇을 의미합니까? 쉘 스크립트가 인수로 얻게 될 것으로 예상되는 것은 무엇입니까? – Schwern

+0

perl 배열 인수를 recive하는 방법을 모르겠다 – joe

+0

bash 스크립트에 모든 배열 요소를 전달 하시겠습니까? – Space

답변

5

이 :

/tmp/a.sh 1 2 3 

당신은 단순히 당신이 시스템에 전달 무엇을 인쇄하여이를 볼 수 있습니다 :

my @array = (1,2,3); 
system ("/tmp/a.sh @array"); 

쉘 명령과 같습니다

print "/tmp/a.sh @array"; 

a.sh 쉘 인수의 다른 집합처럼 그들을 처리해야합니다.

안전을 위해, 당신은 쉘을 무시하고 직접 인수로의 배열을 전달해야합니다

system "/tmp/a.sh", @array; 

을이 별도의 인수로보다는 공간 구분 된 문자열로 @array의 각 요소를 전달 하.

my @array = ("Hello, world", "This is one argument"); 
system "./count_args.sh @array"; 
system "./count_args.sh", @array; 

count_args.sh은 다음과 같습니다 :

#!/bin/sh 

echo "$# arguments" 

당신이 6 개 인수를 얻는 첫 번째 그것이 얻는 두 번째로 그를 볼 수 있습니다 @array의 값이 예를 들어, 공백을 포함 할 경우에 중요합니다

쉘 프로그램에 인수 처리에 짧은 튜토리얼 2. here를 찾을 수 있습니다.

어쨌든, 왜 펄에 하나 개의 프로그램을 작성하고 쉘 하나? 2 개의 언어를 사용하기 위해 복잡성이 증가하고 쉘에는 디버거가 없습니다. 둘 다 Perl로 작성하십시오. 더 나은 방법은 Perl 프로그램에서 함수로 작성하는 것입니다.

+0

시스템에 별도의 인수로 전달하면 따옴표 같은 다른 "특수"문자가있을 때도 도움이됩니까? 현재 시스템에 단일 문자열로 전달할 모든 특수 문자를 이스케이프 처리하는 syscall이 있습니다.하지만 통과하는지 궁금합니다. – Herms

+0

@Herms : 예, 단일 문자열 대신 배열을 전달하면 인수를 "이스케이프"하거나 따옴표로 묶을 필요가 없습니다. – runrig

1

: 펄

: 쉘에서

@a=qw/aa bb cc/; 
    system("a.sh ".join(' ',@a)); 

(a.sh) :

#!/bin/sh 
i=1; 
while test "$1" 
do 
    echo argument number $i = $1 
    shift 
    i=`expr $i + 1` 
done 
+5

Perl의 시스템 목록 형식을 사용하는 것이 좋습니다. 'system ('a.sh', @a)' –

+0

당신은 실제로 인자의 쉘 보간을 원하지 않는 한'system' *의리스트 형식을 사용하는 것이 낫습니다. 이 경우 코드가 필요 없게 만들고 '시스템'목록 형식을 사용할 수 있도록 코드를 설계하는 것이 좋습니다. – daotoad

-2

한 번 모든 배열 요소를 전달하려면 :

my @array = qw(1 2 3); 

system("/tmp/a.sh". join(" ", @array)); 

배열 요소를 전달하려면 하나의 하나

my @array = qw(1 2 3); 
foreach my $arr (@array) { 
    system("/tmp/a.sh $arr"); 
} 
+0

쉘 스크립트에서이 배열 변수를 처리하는 방법은 무엇입니까? – joe

+2

누군가가'$ ",''@array"'가'join ("", @array)와 동등하지 않다면, – Schwern

+1

당신은 그 조인이 필요 없기 때문에리스트 형식으로 시스템을 사용해야합니다 .. –

2

는 쉘 스크립트는 [email protected]에 인수를받습니다 : 당신은 좀 더 제공해야 할거야

#!/bin/bash 
echo "${@:2:1}" # second argument 
args=([email protected]) 
echo "${args[2]}" # second argument 
echo "${@: -1}" # last argument 
echo "${@:$#}"  # last argument 
관련 문제