function f(){ i=1; echo "${!i}" ; }
f a b
function f(){ i=1; echo "${!((i+1))}" ; }
f a b
輸出:bash: ${!((i+1))}: bad substitution
,我想輸出是b
什麼是正確的語法?
function f(){ i=1; echo "${!i}" ; }
f a b
function f(){ i=1; echo "${!((i+1))}" ; }
f a b
輸出:bash: ${!((i+1))}: bad substitution
,我想輸出是b
什麼是正確的語法?
爲了補充codeforester's helpful answer:
如果您只需要訪問您的功能位置參數,你可以使用數組語法提取感興趣的參數;數組切片語法確實支持算術表達式:
> function f(){ i=1; echo "${@: i+1 : 1}" ; }; f a b
b
看起來像Bash不允許在變量間接表達式中使用表達式。如何括號擴展中使用它之前遞增的i
值,就像這樣:
function f() { i=2; echo "${!i}"; }
從Bash的手冊:
$ $ {前綴@!}
{前綴*!}擴展爲名稱以前綴開頭的變量名稱,用IFS特殊變量的第一個字符分隔。當使用'@'並且擴展出現在雙引號內時,每個變量名稱將擴展爲單獨的單詞。
我不認爲這是從手動正確的報價。這些擴展到以*'prefix' *開頭的*變量名*的數組。正確的引用是[參數擴展](https://www.gnu.org/software/bash/manual/bash.html#Shell-Parameter-Expansion)的第四段,其中'$ {!prefix *}'和實際上將'$ {!prefix @}'作爲規則的例外。 –