這個問題與執行描述shell命令的字串陣列不同。
例如,我們有一個陣列
myarr=( echo hello you )
如何將其作為一個命令執行,即運行echo hello you本身?
uj5u.com熱心網友回復:
為了在任何情況下都能正常作業,你必須在你的擴展周圍加上引號。
myarr=( printf ' - %s
' "第一行"/span> "第二行"/span> )
"${myarr[@]}"/span>
...正確地寫入輸出:
- 第一行
- 第二行
如果你不加引號,這就不作業。如果你使用eval,它也不作業。
破碎的方法1。漏掉引號
myarr=( printf ' - %s
' "第一行"/span> "第二行"/span> )
${myarr[@]}
...只寫:
-。
破解方法2:不適當地使用
eval。
myarr=( printf ' - %s
' "第一行"/span> "第二行"/span> )
eval "${myarr[@]}"/span>
...也只寫:
-
uj5u.com熱心網友回復:
只要使用[@](將陣列變成空格分隔的字串):
$ myarr=( echo hello you )
$ "${myarr[@]}"
您好
注意:這樣做可以,但我個人認為使用eval更正確:
$ eval "${myarr[@]}"/span>
您好
EDIT:正如下面的評論所指出的,需要引號,用eval的解決方案是不正確的,盡管它在這種情況下是有效的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/309903.html
標籤:
上一篇:LINQ的條件是某些列可以被忽略,這取決于用戶的輸入?
下一篇:檢查服務的狀態
