2013-11-14 10 views
0

Как я могу преобразовать это через сценарий оболочки bash? Спасибо.Bash Shell Script - Cut

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

Вы хотите преобразовать обратную строку в массив символов, не так ли? – 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} содержит пробелы, они будут потеряны (т. Е. Не будет никаких элементов массива, содержащих пробел).