我有一個非常簡單的腳本名稱 tt.sh,如下所示:
listFile=("A" "B" "C" "D")
echo ${listFile[1]} ${listFile[2]}
我試圖用source和 bash測驗這個腳本,但得到了不同的結果:
./tt.sh
B C
source tt.sh
A B
為什么source命令從 1 而不是 0 開始取陣列的開頭?我正在使用 MacOS

uj5u.com熱心網友回復:
我沒有 Mac,但這是我可以在 Arch Linux (2021) 上重現的內容:
$ cat >tt.sh
listFile=("A" "B" "C" "D")
echo ${listFile[1]} ${listFile[2]}
^D
$ bash tt.sh
B C
$ zsh tt.sh
A B
當我用 bash 運行腳本時,它顯示B C. 當我使用 zsh 運行時,它顯示A B.
你真的在你采購的終端上使用 bash 嗎?您可以仔細檢查:
$ echo $0
bash
如果上面顯示 bash,則表示您是。如果它顯示 zsh,則意味著您正在使用 zsh,因此您將在源代碼時看到 zsh 行為。
從 macOS Catalina 開始,默認值為 zsh。如果您真的喜歡 bash 行為,您可以嘗試在 Mac 設定上切換默認 shell。
uj5u.com熱心網友回復:
當您獲取它時,將使用當前的 shell,當您執行 shebang 中提到的可執行檔案時,將使用它。
bash 索引從 0 開始,其他一些 shell 的陣列索引從 1 開始。
很可能您當前的 shell 不是 bash。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/360646.html
