2013-11-14 228 views
0

如何在bash shell腳本中將它轉換一段時間?謝謝。Bash Shell腳本 - 剪切

a[4]=$(echo $c | cut -c1) 
a[3]=$(echo $c | cut -c2) 
a[2]=$(echo $c | cut -c3) 
a[1]=$(echo $c | cut -c4) 
a[0]=$(echo $c | cut -c5) 

b[4]=$(echo $d | cut -c1) 
b[3]=$(echo $d | cut -c2) 
b[2]=$(echo $d | cut -c3) 
b[1]=$(echo $d | cut -c4) 
b[0]=$(echo $d | cut -c5) 
+0

你想將一個反轉的字符串轉換爲char數組嗎? – higuaro

回答

1

你不需要也削減,下面的工作:

a=(); for ((i=0; i<5; i++)); do a+=("${c:$i:1}"); done 
b=(); for ((i=0; i<5; i++)); do b+=("${d:$i:1}"); done 
+0

請參閱**工作演示:http://ideone.com/eL4exa** – anubhava

+0

沒有工作,感謝您的快速回復。也許是關於我的代碼,但我不能把所有的代碼放在框中。 – user2993333

0

有越來越顛倒字符串爲數組的幾種方法,這裏是一個:

#!/bin/bash 

STRING="test string" 

# First, reverse the string into a new variable 
REV_STRING=$(rev <<< $STRING) 

# Declare the array 
declare -a ARRAY 

ARRAY_LEN=${#REV_STRING} 

ARRAY_UPPER_BOUND=$((ARRAY_LEN - 1)) 

for i in $(seq 0 $ARRAY_UPPER_BOUND); do 
    # Here, ${REV_STRING:$i:1} is equivalent to say REV_STRING.charAtPosition(i) 
    ARRAY[$i]=${REV_STRING:$i:1} 
done 

# To print the array content 
for i in $(seq 0 $ARRAY_UPPER_BOUND); do 
    echo ${ARRAY[$i]} 
done 

此外,您可以在循環中使用cut,如下所示:

#!/bin/bash 

STRING="test string" 
REV_STRING=$(rev <<< $STRING) 

declare -a ARRAY 

ARRAY_LEN=${#REV_STRING} 

for i in $(seq 1 $ARRAY_LEN); do 
    # Here, ${REV_STRING:$i:1} is equivalent to say REV_STRING.charAtPosition(i) 
    # ARRAY[$i]=${REV_STRING:$i:1} 
    ARRAY[$i]=$(echo $REV_STRING | cut -c$i) 
done 

# To print the array content 
for i in $(seq 1 $ARRAY_LEN); do 
    echo ${ARRAY[$i]} 
done 
0

如果我正確理解你的最終目標,這裏有一個快速班輪(儘管它使用了幾個外部公用設施,而不僅僅是bash代碼):

b=($(rev <<< "${c}" | sed -e 's/./& /g')) 

這應該採取任何${c}包含,扭轉這種局面,將其拆分爲單個字符,並將每個字符分配給數組b中的條目。請注意,如果原始${c}包含空格,那麼這些將丟失(即不會有任何包含空格的數組元素)。