Fish shell - 이 구문에 어떤 문제가 있나요?

Fish shell - 이 구문에 어떤 문제가 있나요?

Fish 셸에서 실행한 다음 다음과 같이 cat호출에 파이프하는 heredoc 문자열이 포함된 bash 스크립트가 있습니다 .source

~/foo/버즈:

  1 #!/usr/bin/env bash
  2 
  3 cat << EOS
  4   function bar
  5     echo 'Hello world'
  6   end
  7 EOS

생선 껍질에서 본 모습:

richiethomas@richie ~/foo (master) [126]> ./baz | source
richiethomas@richie ~/foo (master)> bar

Hello world

위에 표시된 대로 결과적으로 bar함수를 실행할 때 호출할 수 있게 됩니다 ./baz | source.

bar그러나 함수 구현을 다음과 같이 변경하면 오류가 발생합니다.

  1 #!/usr/bin/env bash
  2 
  3 cat << EOS
  4   function bar 
  5     set myVar 5 
  6     switch $myVar 
  7       case 4 
  8         echo '4' 
  9       case 5 
 10         echo '5' 
 11       case '*' 
 12         echo 'Not found' 
 13     end 
 14   end
 15 EOS

이 작업을 수행 하려고 하면 source다음 오류가 발생합니다.

richiethomas@richie ~/foo (master) [0|1]> ./baz | source
- (line 1): Missing end to balance this function definition
  function bar
  ^
from sourcing file -
source: Error while reading file '<stdin>'

동등한 함수 + 스위치 문을 Fish 셸에 직접 붙여넣으면 정상적으로 작동합니다.

richiethomas@richie ~/foo (master) [0|1]> function bar
                                              set myVar 5
                                              switch $myVar
                                                  case 4
                                                      echo 'it is 4!'
                                                  case 5
                                                      echo 'it is 5!'
                                                  case '*'
                                                      echo 'not found'
                                              end
                                          end

richiethomas@richie ~/foo (master)> bar

it is 5!

end파일과 셸에 복사/붙여넣은 코드에 동일한 # 문이 있으므로 잘못된 문이 붉은 청어인 것 같습니다. baz그렇다면 실제 오류가 무엇인지 알 수 없습니다.

내 목표는 bash 스크립트의 구분 기호 문자열 내에서 fish 함수를 구성한 다음 fish 스크립트에서 해당 bash 스크립트를 가져와 함수를 호출할 수 있도록 하는 것입니다. 여기서 내가 어디서 잘못됐나요?

답변1

변수( $myVar)는 인용하지 않는 한 여기 문서에서 확장됩니다.

cat << 'EOS'
# .....^...^

참조번호 3.6.6 여기에 문서화

관련 정보