2013-01-23 95 views
0

我的理解是,在編寫Unix shell程序時,您可以使用for循環遍歷列表中的字符串。這是否意味着您可以通過索引訪問字符串的元素?Shell編程:列表的訪問元素

例如:

foo="fruit vegetable bread" 

我怎麼能訪問這句話的第一個字?我已經嘗試使用括號這樣的基於C的語言無濟於事,我在線閱讀的解決方案需要正則表達式,我現在要避免使用這些表達式。

回答

2

通過$foo作爲函數的參數。比你可以使用$1,$2等來訪問函數中的相應單詞。

function try { 
echo $1 
} 

a="one two three" 

try $a 

編輯:另一個更好的版本是:

a="one two three" 
b=($a) 
echo ${b[0]} 

EDIT(2):看看this thread.

+0

+1如果使用數組 –

0

使用數組是最好的解決方案。

下面是使用間接變量

get() { local idx=${!#}; echo "${!idx}"; } 

foo="one two three" 

get $foo 1 # one 
get $foo 2 # two 
get $foo 3 # three 

注意一個取巧的辦法:

  • $#是(在所有這些情況下,4)提供給函數的參數個數
  • ${!#}最後一個參數
  • ${!idx}的值idx'th參數
  • 您不能引用$foo,因此shell可以將字符串拆分爲單詞。

有了一點錯誤檢查:

get() { 
    local idx=${!#} 
    if (($idx < 1 || $idx >= $#)); then 
    echo "index out of bounds" >&2 
    return 1 
    fi 
    echo "${!idx}" 
} 

請不實際使用此功能。使用數組。