tcsh 별칭에서 sed를 사용하는 중 오류가 발생했습니다.

tcsh 별칭에서 sed를 사용하는 중 오류가 발생했습니다.

다음과 같이 별칭 을 "가져오기/실행"할 수 없습니다 tcsh.

alias inp1 "grep -i "final_model" /scr/cb2TempProd/tmp/$USER/\!:1/Simulation/Input/assemble.preprocessing | sed 's#.*<##; s/>$//'"
  • 여기서 \!:1= 수동 입력

  • 예상 출력 =/scr/cb2TempProd/tmp/$USER/test/Simulation/Input/X1_X_XXXX_XXXXXX15X_H10EK011.inp

  • 원하는 출력에 추가 별칭(미리 정의됨)을 사용하겠습니다 =

    alias inp2 "gdyn `grep -i "final_model" /scr/cb2TempProd/tmp/$USER/\!:1/Simulation/Input/assemble.preprocessing | sed 's#.*<##; s/>$//'`"
    

  • 첫 번째 문제 = 호환되지 않는 변수 오류 수정(별칭 파일도 가져오기)
  • 두 번째 질문 = 단일 별칭에 두 개의 출력을 가질 수 있습니까?

답변1

, csh변수 대체언제나큰따옴표 안에 표시되며 백슬래시로 차단할 수 없습니다.

% echo "$"
Illegal variable name.
% echo "\$"
Variable name must contain alphanumeric characters.
% echo "\\$"
Variable name must contain alphanumeric characters.
% echo \$
$

이는 Bourne 쉘과 다르며 다음 문서에 설명되어 있습니다.맨페이지[1]:

입력 줄의 별칭을 지정하고 구문 분석한 후 $각 명령이 실행되기 전에 문자로 입력된 변수 대체가 수행됩니다. 이 확장은 앞에 $Except를 사용 하여 방지할 수 있습니다.\"항상 나타나는 큰따옴표( ) 안에, 작은따옴표( ') 안에는 표시되지 않습니다. 역따옴표( )로 묶인 문자열은 ` `나중에 해석되므로(아래 명령 대체 참조) $나중에까지 대체가 발생하지 않습니다(전혀 발생하지 않는 경우). A $뒤에 공백, 탭 또는 줄 끝이 오면 변경되지 않은 채 전달됩니다.

아마도 별칭을 지정하는 가장 쉬운 방법은 앞/뒤에 큰따옴표를 시작/중지하는 것입니다 \$.

alias inp1 "grep -i 'final_model' /scr/cb2TempProd/tmp/$USER/\!:1/Simulation/Input/assemble.preprocessing | sed 's#.*<##; s/>"\$"//'"

inp1두 번째 별칭의 경우 다음 위치에 붙여넣는 대신 간단히 재사용해야 한다고 생각합니다 .

alias inp2 'gdyn `inp1 \!:1`'

[1] 이것은 의 맨페이지이지만 csh참조 및 대체 항목은 에서 확실히 유사합니다 tcsh.

관련 정보