Can you summarize the following document?
        
  fish能根據使用者的輸入歷史與當前所在的目錄提供實時的自動完成。與bash的類似功能歷史搜尋相比,這種不必頻繁切換模式還可以用方向鍵選擇建議項的做法使使用者能更流暢地進行輸入。  fish也擁有功能豐富的Tab補全功能。fish能夠自動補全檔案路徑、變數與不少命令的引數,且支援路徑萬用字元與C shell的花括號展開。fish某種意義上會通過分析命令的man文件生成與之相關的補全。  fish傾向於使用命令來代替語法結構。由於命令相比語法結構能更方便地在shell內查到幫助內容,fish的功能很容易在使用過程中被使用者自行發現。fish允許子程式提供對自己的說明,進一步免去了來回查詢幫助的麻煩。fish還允許使用者在擁有圖形使用者介面的瀏覽器內檢視幫助。

  fish的語法類似於其他相容POSIX的shell,但由於其開發者認為POSIX shell設計得有問題,fish的語法又與POSIX shell有相當的不同。 > set foo bar > echo $foo bar  > set wd (pwd) > echo $wd  > set A 3 5 7 9 12 > set B $A[2 1] > echo $B 5 3 > seq 3 1 2 3 > echo $A[(seq 3)] 3 5 7 > set --erase A[$B] > echo $A 3 5 9  > for i in *.jpg > for i in *.jpg; convert $i (basename $i.jpg).png; end > cat /etc/passwd | while read line

  其他shell的部分語法結構,例如管道、子程式與迴圈,是使用一種稱為子shell的方式實現的。所謂子shell即臨時執行一個用完即退出的新的子程序。在子shell中執行的修改通常不符合一般人的直覺地,不會反映到真正的shell上(即沒有函式副作用)。fish不依賴於子shell實現其語法結構,故所有內建命令在任何語境下都是會正常運作的。  > cat *.txt | read line  例如,下述bash指令碼會因為子shell而導致迴圈內部給found賦的值在退出迴圈後即消失  found=" cat /etc/fstab | while read dev mnt rest; do done 而需要用另一種方式來規避這個問題: found=" while read dev mnt rest; do done < /etc/fstab 如下的fish指令碼則無需擔心子shell會影響副作用。 set found " cat /etc/fstab | while read dev mnt rest end

  fish會在發生錯誤時清晰地指出出錯的位置並給出修正的方法。 > foo=bar fish: Unknown command “foo=bar”. Did you mean “set VARIABLE VALUE”? For information on setting variable values, see the help section on the set command by typing “help set”.  > echo ${foo}bar fish: Did you mean {$VARIABLE}? The '$' character begins a variable name. A bracket, which directly followed a '$', is not allowed as a part of a variable name, and variable names may not be zero characters long. To learn more about variable expansion in fish, type “help expand-variable”.  > echo $(pwd) fish: Did you mean (COMMAND)? In fish, the '$' character is only used for accessing variables. To learn more about command substitution in fish, type “help expand-command-substitution”.

  Fish有一個名為通用變數的功能。通過利用通用變數,使用者可以在多個同時執行的fish例項之間共享一個變數。即使使用者登出或者計算機重啟,通用變數的值也不會丟失。 > set --universal EDITOR emacs  > set --universal fish_color_cwd blue

  第二版還加入瞭如下功能:
fish () 是一個Unix shell。fish旨在成為一個比其他shell互動性更強、使用者體驗更好的shell,並讓其豐富的強大功能能夠被使用者輕鬆發現、記住並學以致用。fish的語法既不衍生於Bourne shell也不衍生於C Shell,故被分類為一種“外來”shell。有別於為節約系統資源而預設禁用部分功能的其他shell,fish的全部功能都是預設啟用的。