簡體   English   中英

Bash case 語句中的開始括號是否有意義?

[英]Does starting parenthesis in Bash case statement have meaning?

我在 Bash 腳本中找到了一個 case 語句,如下所示:

case $i in
    (0) set -- ;;
    (1) set -- "$args0" ;;
    (2) set -- "$args0" "$args1" ;;
    (3) set -- "$args0" "$args1" "$args2" ;;
    (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
    (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
    (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
    (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
    (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
    (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac

我從未見過使用起始( ,我只見過SOME_CASE) command list;; . 我找不到對這種其他格式的任何引用 - 這個起始括號有什么特殊意義嗎?

起始括號是可選的,但它(通常)保留平衡括號,這使得在vim等編輯器中更容易,它可以從右括號(例如)]} )跳轉到匹配的左括號,考慮嵌套括號。 它沒有其他意義。

原始的 Bourne shell 不支持前導左括號。

另請參見復合命令case的 POSIX shell 規范或條件構造下的 Bash 手冊。


看起來您的腳本似乎急需使用 Bash數組(另請參見Shell 參數)。

declare -a args

args+=("argument 0")
args+=("argument 1")
args+=("argument 2" "argument 3" "argument 4 with spaces")

set -- "${args[@]}"

沒有case arguments 的數量沒有限制。 如何構建陣列有待討論,但單行而不是 10 路case是引人注目的。

根據:

man 1 bash

case運算符的格式為:

[ [(] 模式 [ | 模式 ]...) 列表中的大小寫詞;; ]... esac

左括號在方括號中,這意味着它不是必需的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM