csh 스크립트에서 "@" 문자의 의미는 무엇입니까?

csh 스크립트에서 "@" 문자의 의미는 무엇입니까?

csh 스크립트를 bash로 번역하고 있는데 다음과 같은 줄을 발견했습니다.

@ lines = `grep num_lines ../config.txt | awk '{printf("%d",int($2))}' `

여기서 "@"은 무엇을 합니까? 내가 좀 찾았어문서"@"를 표현식으로 사용하여 csh를 선언합니다. 그러나 이것은 나에게 일반적인 변수 할당처럼 보입니다. bash에서 코드의 grep 및 awk 부분을 실행하면 출력은 "%d 12045"와 같이 "%d" 앞에 오는 정수입니다.

답변1

글쎄요, 이 스크립트를 쓴 사람이 무슨 생각을 했는지 아는 것은 불가능합니다. 그러나 다음은 몇 가지 관찰 사항입니다.

  • awk명령이 표시 되면 printf입력 줄에 두 번째 문자열의 정수 값이 인쇄됩니다.
  • ~처럼엠마 루오 댓글제가 리뷰한 대로, awk그것은 매우 강력한 프로그램입니다. grep, 또는 다른 와 sed함께 실행할 필요가 거의 없습니다 awk. 그래서
    grep num_lines파일 이름| awk '{ printf("%d", int($2)) }'
    다음과 같이 쓸 수 있다
    awk '/num_lines/ { printf("%d", int($2)) }'파일 이름
  • 위에서도 말씀드렸듯 int($2)정수 부분 입력 줄의 두 번째 문자열 값입니다. 따라서 프로필에 이라고 표시되어 있으면 을 num_lines   foo얻 습니다 0. 형식이 잘 지정된 구성 파일을 사용하면 그러한 예방 조치를 취할 필요가 없는 것 같습니다.num_lines   3.143
  • 어떤 경우 에라도,
    printf("%d", int($2))
    받아들일 수 없다. 내가 아는 한,
    printf("%d", $2)
    그리고
    정수 인쇄($2)
    (거의) 동일합니다.
  • 제가 확인할 수 있는 한 가지 차이점은 이 printf버전은 끝에 개행 문자를 쓰지 않는다는 것입니다.
    $ echo "num_lines 42" awk '{printf("%d", $2)}';날짜
    422019년 5월 13일 월요일 오전 12:00:00
     
    $ echo "num_lines 42" awk '{print int($2)}';날짜
    42
    2019년 5월 13일 월요일 오전 12:00:01
    `…`그러나 후행 개행 문자가 제거되므로 이는 실제로 관련이 없습니다 .
  • "이것은 나에게 일반적인 변수 할당처럼 보입니다"라고 말합니다. 그러나 [t]csh 사용자는 이것이 허용되지 않는다는 것을 알고 있습니다.
    바꾸다=
    당신은 말해야
    놓다 바꾸다=
    또는
    @ 바꾸다=표현
    물론 간단한 정수 상수도 유효합니다.expr, 따라서 저자는 아마도 더 짧고 값이 정수라는 것을 알고 있기 때문에 @대신 사용했을 것입니다.set

따라서 이 명령문은 변수를 linesfrom의 값으로 설정합니다.num_lines../config.txt

관련 정보