2009-05-20 4 views
1

TextB의 시작 부분에 TextA를 넣고 싶습니다.Bash에서 매개 변수를 참조 할 수 없습니다.

cat TextA A TextB 

문제는 다음과 같은 스크립트에서 TextA TextB 인 첫 번째 및 두 번째 매개 변수를 참조하는 방법을 모르는 것입니다. A :

 #!/bin/bash 

    cat TextA > m1 
    cat TextB > m2 
    cat m1 m2 > TextB 

여기서 m1과 m2는 임시 파일입니다.

쉘 스크립트의 두 파일을 어떻게 참조 할 수 있습니까?

답변

4

당신의 변수를 참조 할 $0, $1, $2 등을 사용할 수 TextB 앞에 있다는 것입니다 스크립트.

$0


$2이 두 번째 매개 변수
그래서 예를 들어

에 첫 번째 매개 변수 스크립트 자체
$1의 이름입니다, 당신은이 명령이있는 경우 :

a A1 A2 

그러면 a 내부에는 다음이 표시됩니다.

$0 = a 
$1 = A1 
$2 = A2 
+0

답장을 보내 주셔서 감사합니다! –

+0

원래 질문에 대한 대답이기 때문에 답변을 수락합니다. 제발, 내 대답을 하단에보십시오. 명령 티는 마침내 문제를 해결했습니다. –

+0

이 경우 해결 방법을 공유하려면 "임시 파일을 사용하지 않고 파일 a를 파일 b 앞에 어떻게 추가 할 수 있습니까?"라는 새로운 질문을 게시합니다. 그런 다음 그 답을 게시하십시오. –

2

당신은 그냥 사용할 수 APPEND는 (>>)

cat TextB >> TextA 

결과는 TextA가 TextA에서 텍스트를

+1

이것은 문제가되는 솔루션입니다. 이것은 내가 원하지 않는 TextA 파일을 변경합니다. 예를 들어, TextB는 제 에세이이고 TextA는 저작권 고지입니다. 모든 에세이에 동일한 저작권 고지를 사용하고 싶습니다. –

+1

다음을 사용할 수 있습니다 : cat TEXTA TEXTB> TEXTA_B 고양이가 읽을 수 있기 전에 쉘이 TEXTB를 쓰기 위해 열어서 cat TEXTA TEXTB> TEXTB를 할 수 없습니다. 이렇게하면 TEXTB가 사용되기 전에 지워지므로 효과는 다음과 같습니다. cat TEXTA> TEXTB –

3

bash 스크립트에서 첫 번째 매개 변수는 $ 1이고 두 번째 매개 변수는 $ 2 등입니다. 당신은 예를 들어, 기본값은 세 번째 매개 변수는 사용할 수 있습니다 원하는 경우

가 :

var=${3:-"default"} 
+0

기본값에 대해 알지 못했습니다. 감사! –

0

는 다음과 같은 다만 수처럼 보이는 :


TextA="text a" 
TextB="text b" 
echo "$TextA $TextB" > file1 

또는 APPEND를 사용 (> >) 운영자.

1

나는 다음을 수행합니다 :

#!/bin/bash 

if [ $# -ne 2 ] 
then 
    echo "Prepend file with copyright notice" 
    echo "Usage: `basename $0` <copyright-file> <mainfile>" 
    exit 1 
fi 

copyright=$1 
mainfile=$2 

cat $mainfile > /tmp/m.$$ 
cat $copyright /tmp/m.$$ > $mainfile 

#cleanup temporary files 
rm /tmp/m.$$ /tmp/m2.$$ 
1

나는 당황 스럽네요 아무도

cat TextA TextB | tee > TextB 

이 방법, 당신은 임시 파일을 작성하는 번거 로움을 피할 수를 다음과 같은 결과를 알 수 없다.

+0

TextB가 너무 커서 메모리에 맞지 않을 때이 방법이 가능합니까? 이 경우 tee는 고양이가 텍스트를 모두 읽는 것을 끝내기 전에 TextB를 덮어 쓰기 시작할 수 있습니다. –

+0

@ 네이선 : 좋은 지적입니다! 나는 잘 모르겠다. 나는 아직 기억에 문제가 없다. 메모리 한도인지 아십니까? –

관련 문제