shell判斷系統路徑中是否存在空格

505donkey發表於2024-07-08

方法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輸出,將所有空格替換為空字元,即刪除所有空格。

相關文章