方法1:使用 grep 命令
path="/path/to/check"
if echo "$path" | grep -q " "; then
echo "Path contains spaces"
else
echo "Path does not contain spaces"
fi
透過 echo 將路徑傳遞給 grep進行空格匹配,-q 參數列示靜默輸出,即只做判斷,但不輸出匹配結果。
方法2:使用正規表示式
path="/path/to/check"
if [[ "$path" =~ [[:space:]] ]]; then
echo "Path contains spaces"
else
echo "Path does not contain spaces"
fi
- [[ ]] 這是Bash中用於條件測試的高階語法,比起單括號 [ ],雙括號支援更多的運算子和模式匹配。
- =~ 是正規表示式匹配運算子,用於檢查左邊的字串是否匹配右邊的正規表示式模式。
- [[:space:]] 是一個POSIX字元類,代表任何空白字元,包括 空格、製表符、換行符、回車符、換頁符和 垂直製表符等。
方法3:使用字串匹配
path="/path/to/check"
if [[ "$path" == *" "* ]]; then
echo "Path contains spaces"
else
echo "Path does not contain spaces"
fi
- == 比較運算子,用於字串比較。
- *" "* 空格萬用字元模式。
方法4:使用IFS命令
path="/path/to/check"
IFS=' ' read -r -a array <<< "$path"
if [ "${#array[@]}" -gt 1 ]; then
echo "Path contains spaces"
else
echo "Path does not contain spaces"
fi
- IFS=' ' 將內部欄位分隔符定義為空格。
- read -r -a array 讀取輸入並儲存到名為 array 的陣列中,其中 -r 表示防止反斜槓轉義,-a 表示將輸入儲存到陣列 array 中。
- ${#array[@]} 表示獲取陣列 array 的元素個數。
方法5:使用tr命令計數空格數量
path="/path/to/check"
if [ $(echo "$path" | tr -cd ' ' | wc -c) -gt 0 ]; then
echo "Path contains spaces"
else
echo "Path does not contain spaces"
fi
- tr -cd ' ' 表示接收echo輸出並刪除所有非空格字元,只保留空格,其中 -c 表示補集,即選擇不在指定字符集中的所有字元,-d 表示刪除之後指定的字元。
- wc -c 接收上一步管道結果並計數。
方法6:使用sed命令替換空格並比較
path="/path/to/check"
if [ "$path" != "$(echo "$path" | sed 's/ //g')" ]; then
echo "Path contains spaces"
else
echo "Path does not contain spaces"
fi
- sed 's/ //g' 接收echo輸出,將所有空格替換為空字元,即刪除所有空格。