這不是一個真正的問題(儘管我最後有一個),而是解決我想分享的問題的一個解決方案,以幫助其他人。bash [:太多的參數大於符號
打開一個新終端(特別是安裝了bash完成macport的OS X上的iTerm2)時,我得到的最長時間是bash: [: too many arguments
。該錯誤起源於文件/opt/local/etc/bash_completion
中的線if [ -n "$BASH_VERSION" -a -n "$PS1" -a -z "$BASH_COMPLETION_COMPAT_DIR" ]; then
。我終於找到了我的.bash_profile
中有export PS1='>'
這個事實。將PS1更改爲其他內容(例如'> '
)解決了bash完成時的問題。
在OS X和Debian一些實驗表明,添加額外的表達式(具有-a
或-o
)插入涉及'>'
中表達後的測試([ ]
)時,會發生該問題。例如,
> A='>'; if [ -n "$A" ]; then echo "yes"; fi
yes
> A='>'; if [ -n "$A" -a -n "$A" ]; then echo "yes"; fi
bash: [: too many arguments
> A='> '; if [ -n "$A" -o -n "$A" ]; then echo "yes"; fi
yes
> A='>'; if [ -n "$A" -o -n "Hello" ]; then echo "yes"; fi
bash: [: too many arguments
> A='>'; if [ -n "Hello" -a -n "$A" ]; then echo "yes"; fi
yes
這是一個(已知)在bash中的錯誤?
我認爲這是由於「大於」運算符優先於'-n'運算符 – edi9999
而不是使用新的'[[]]'的另一個原因。 – 123
@ edi9999當然,「大於」應該被解釋爲只是一個字符串?畢竟,它使用'>>''。 (這就是爲什麼我想知道這是否是一個bug。) @ 123是的,我通常會使用'[[]]',但這是在我沒有寫的腳本中(即'bash_completion'),而我只控制'PS1'環境變量。 –