0

我如何在 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)
4

3 回答 3

1

您也不需要 cut ,以下将起作用:

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
于 2013-11-14T18:03:38.013 回答
0

如果我正确理解了您的最终目标,这里有一个快速的单行代码(尽管它使用了几个外部实用程序,而不仅仅是bash代码):

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

这应该包含任何${c}内容,将其反转,将其拆分为单个字符,并将每个字符分配给 array 中的一个条目b。请注意,如果原始${c}包含空格,那些将丢失(即不会有任何包含空格的数组元素)。

于 2013-11-14T19:45:17.530 回答
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
于 2013-11-14T19:22:18.770 回答