更新2:此問題與this question有關,可能是因爲這可能/不可能工作的基本原因是相同的。但我不確定它是否實際上是重複的,因爲嵌套只是如何獲取字符串的一個例子。相同的基本問題,也可以表述爲:Bash子串和參數擴展不分配給變量
- 是否有直接的參數擴展使用一個字符串的方式,可能使用
expr
- 什麼是最簡潔的方式來管輸出參數擴張? 「假」的語法
更多的例子來說明這些目標......
${$(echo "b"; b="ABCDE")::3} # Assign output inside?
... | grep -o "ABCDE" | ${-::2} # pipe to placeholder inside?
所以這取決於你的目標,它可能是一個欺騙與否。 總之,從目前的答案,它聽起來就像是不可能反正有這樣的做法...
這是關於bash的操作一個一般性的問題,而不是試圖獲得一個特定的字符串subser ...
我知道你可以使用參數擴展和其他技巧來提取或替換定義變量的部分。
例如:
$ MYVAR=$(date) # just to generate text; could be "ABCDE"
$ echo $MYVAR
Mon Oct 20 15:55:07 PDT 2014
$ echo ${MYVAR:11}
15:55:07 PDT 2014
$ echo ${MYVAR%:*}
Mon Oct 20 15:55
我想是一種方法,「鳥巢」這些操作,而無需創建中間變量。
例如,你當你做了什麼:
$ TIME=${MYVAR:11}
$ echo ${TIME%:*}
15:55
我希望能夠到鳥巢了與TIME
發生,這是在MYVAR
發生的操作中的操作。
想到的潛在語法類似於$()
,它可以讓您嵌套操作,但可以爲變量執行操作。它可能是這個樣子...(不工作! - 我已經試過)
echo ${`${MYVAR:11}`%:*} # ERROR
的好處是,你可以用分配MYVAR
和TIME
完全免除,並使用字符串或$(date)
(或輸出grep
等)。
可能重複http://stackoverflow.com/questions/6724056/nested- shell參數擴展) – Graham
謝謝@Graham。這個問題也指出了我沒有發現的另一套答案。 – beroe
'bash'不以這種方式鏈接參數擴展。 '$ {foo ...}'中的'foo'必須是文字名稱;沒有其他表達是允許的。一些shell(特別是'zsh')確實允許這種鏈式擴展。 – chepner