回答
使用蠻力,無知和bash
(4.x或3.x的 - 但如果它被調用爲/bin/sh
或sh
- 我的頭很痛打壓它反對sh
磚牆後),你可以嘗試:
$ for i in $(seq 0 ${#consC}); do [ "${consC:$i:1}" = "*" ] && echo "$i [${consC:$i:1}]"; done
44 [*]
46 [*]
47 [*]
48 [*]
49 [*]
51 [*]
52 [*]
53 [*]
54 [*]
55 [*]
$
您可以用改進:,不超調數組的結束,而是顯得更加簡潔高深莫測 - Perl的吃你的心臟了!
我希望有更好的方法。
(顯然,這取決於你到底如何設置consC
,你可能會在輸出中獲得略有不同的數字。)
注:這是在Mac OS X 10.8.4測試,但我有一個自制bash
4.2可用(儘管我大多數時候使用bash
3.2.48 - 因此頭痛)。如果你不能使用bash
,只提供sh
,您需要與"$(expr "$consC" : '^.\{'"$i"'\}\(.\)')"
更換"${consC:$i:1}"
:
$ for i in $(seq 0 ${#consC}); do [ "$(expr "$consC" : '^.\{'"$i"'\}\(.\)')" = '*' ] && echo $i; done
44
46
47
48
49
51
52
53
54
55
$
或者使用[[
運營商和少兩個雙引號:
$ for i in $(seq 0 ${#consC}); do [[ $(expr "$consC" : '^.\{'"$i"'\}\(.\)') = '*' ]] && echo $i; done
44
46
47
48
49
51
52
53
54
55
$
[ ...由於各種原因可以追溯到史前,我的殼被淹沒到/bin/sh
,即使我認爲我沒有將它運行/bin/bash
......我現在已經修復了這個問題!我跑/bin/bash
畢竟...和原來的版本,而expr
正常工作與bash
3.2.48]
你能澄清你的問題?表達式'$ {consC:$ i:1}'出現在代碼中;它是從開始位置'$ i'開始的長度爲1的子字符串,因此它是字符串中的第i個字符。但是循環是由'$(seq 0 $ {#consC})'的輸出控制的,它是數字0..56或其附近。 –
第一個工作正常! – user2662478
太棒了;第一種解決方案比使用'expr'更好。這可能是因爲我將'bash' 3.x作爲'sh'仍然運行 - 而不是'bash' - 並且說明了我的頭痛。避免'expr'是生活中的一個很好的總體目標; OTOH,它是一個強大的(如果相當笨拙的)工具。 –
- 1. 得到猛砸
- 2. 猛砸LS和指揮管
- 3. 在猛砸
- 4. 在猛砸
- 5. 在猛砸
- 6. 猛砸與管
- 7. 猛砸參數替換
- 8. 在猛砸文件
- 9. 猛砸在屏幕
- 10. 猛砸在名稱
- 11. 懶評價猛砸
- 12. 猛砸功能
- 13. 猛砸爲NULL
- 14. 猛砸描述
- 15. 猛砸串
- 16. 格局猛砸
- 17. 猛砸從線
- 18. 從猛砸
- 19. 從猛砸
- 20. 猛砸忽略$
- 21. 遍歷猛砸
- 22. 讀線,猛砸
- 23. 從Ubuntu的猛砸
- 24. 猛砸獲取進程ID在子shell
- 25. 猛砸,參數列表段
- 26. 猛砸如何參數
- 27. 環路與在猛砸
- 28. 運行猛砸在Windows 7
- 29. 猛砸本地化
- 30. 猛砸對目錄
http://mywiki.wooledge.org/XyProblem –