
這是我的腳本的一部分,它告訴我第 3 行有太多參數:
#!/bin/bash
export LC_ALL='C'
if [ `echo "*file 2" | grep -o ^.` = '.' ]
then
echo success
fi
有人知道為什麼嗎?據我所知,我只是比較兩個參數“*”和“.”。
答案1
echo "*file 2" | grep -o ^.
印刷*
。
由於您在雙引號之外有一個命令替換,因此它會經歷通配符(又稱為通配符匹配,又稱為檔案名稱生成)和分詞。如果目前目錄不為空,則*
擴展到目前目錄中的檔案清單。每個文件都成為[
命令中的一個標記,這很可能是語法錯誤。
問題是您沒有在命令替換周圍使用雙引號。始終在變數和命令替換周圍使用雙引號除非你有充分的理由忽略它們。
if [ "$(echo "*file 2" | grep -o ^.)" = '.' ]
看為什麼我的 shell 腳本會因為空格或其他特殊字元而卡住?以獲得更詳細的解釋。