2013-11-14 43 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}包含空格,那么这些将丢失(即不会有任何包含空格的数组元素)。