Fish
fish shell - 這種語法有什麼問題?
我有一個 bash 腳本,它
cat
是一個 heredoc 字元串,我在fish shell中執行它,然後將它傳遞給一個source
呼叫,如下所示:~/foo/baz:
1 #!/usr/bin/env bash 2 3 cat << EOS 4 function bar 5 echo 'Hello world' 6 end 7 EOS
從fish shell:
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 shell中時,等效的函式 + switch 語句可以正常工作:
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
在文件和複製/粘貼到 shell 中的程式碼中都有相同的語句數baz
,所以我懷疑錯誤語句是紅鯡魚?如果是這樣,我不知道真正的錯誤可能是什麼。我的目標是能夠在 bash 腳本的 heredoc 字元串中構造一個 fish 函式,然後從 fish 腳本中獲取該 bash 腳本,以便我可以呼叫該函式。我在這裡哪裡做錯了?
變數 (
$myVar
) 在 heredocs 中得到擴展,除非您引用它:cat << 'EOS' # .....^...^
參考 3.6.6 此處的文件