這不是 bash。這是噓。${foo:0:1} 不起作用。導致不良替代。
foo="Hello"
如何單獨列印每個字符?我正在尋找一種不需要外部命令的方法。
uj5u.com熱心網友回復:
擴展我的評論:傳統的 Bourne shell 并沒有在更現代的 shell 中提供的那種用于字串操作的內置工具。預計您將依賴外部程式來獲得這些功能。
例如,使用像 一樣簡單的東西cut,我們可以這樣寫:
foo="hello"
len=$(echo "$foo" | wc -c)
i=1
while [ "$i" -lt "${len}" ]; do
echo "$foo" | cut -c"$i"
i=$(( i 1 ))
done
這將輸出:
h
e
l
l
o
像這樣的命令cut是“標準”的 shell 腳本命令,盡管沒有內置到 shell 本身中。
uj5u.com熱心網友回復:
正如larsks的回答所寫,您必須依賴外部命令。
我建議使用一次awk呼叫,而不是一次運行外部程式來獲取字串長度并為每個索引重復運行。
foo="hello world"
awk -v "s=$foo" 'BEGIN { l=length(s); for(i=1; i<=l; i ) print substr(s,i,1)}' /dev/null
哪個列印
h
e
l
l
o
w
o
r
l
d
當然,您可以向awk腳本添加進一步處理或讀取并處理輸出,例如
awk ... | while IFS= read -r char
...
見https://mywiki.wooledge.org/BashFAQ/001
uj5u.com熱心網友回復:
建議awk:
awk '{for(i=1;i<=NF;i )print $i}' FS="" <<<$(echo "$foo")
建議bash:
#!/bin/bash
foo="hello me"
for ((i = 0 ; i < ${#foo}; i )); do
echo "${foo:$i:1}"
done
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/484766.html
