我的理解是,在編寫Unix shell程序時,您可以使用for循環遍歷列表中的字符串。這是否意味着您可以通過索引訪問字符串的元素?Shell編程:列表的訪問元素
例如:
foo="fruit vegetable bread"
我怎麼能訪問這句話的第一個字?我已經嘗試使用括號這樣的基於C的語言無濟於事,我在線閱讀的解決方案需要正則表達式,我現在要避免使用這些表達式。
我的理解是,在編寫Unix shell程序時,您可以使用for循環遍歷列表中的字符串。這是否意味着您可以通過索引訪問字符串的元素?Shell編程:列表的訪問元素
例如:
foo="fruit vegetable bread"
我怎麼能訪問這句話的第一個字?我已經嘗試使用括號這樣的基於C的語言無濟於事,我在線閱讀的解決方案需要正則表達式,我現在要避免使用這些表達式。
通過$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.
使用數組是最好的解決方案。
下面是使用間接變量
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}"
}
請不實際使用此功能。使用數組。
+1如果使用數組 –