2013-03-08 4 views
0

Я написал этот сценарий, по-видимому, не имеет никаких проблем:Почему echo терпит неудачу в элементе массива?

#!/bin/bash 

DATA=/home/badouble/STORE/rawData_v1r0 
LOGS=/home/badouble/bABaReC/CDAS_Selection_log 

for dir in $DATA/*/ 
do 
    dir=${dir%*/} 
    echo $dir 
    ARR=$(echo $dir | tr "/" " ") 
    echo ${ARR[1]} 

done 

Но это не дает желаемых результатов, здесь ниже:

/home/badouble/STORE/rawData_v1r0/2011-12 

/home/badouble/STORE/rawData_v1r0/2012-01 

/home/badouble/STORE/rawData_v1r0/2012-02 

/home/badouble/STORE/rawData_v1r0/2012-03 

/home/badouble/STORE/rawData_v1r0/2012-04 

/home/badouble/STORE/rawData_v1r0/2012-05 

/home/badouble/STORE/rawData_v1r0/2012-06 

/home/badouble/STORE/rawData_v1r0/2012-07 

/home/badouble/STORE/rawData_v1r0/2012-08 

/home/badouble/STORE/rawData_v1r0/2012-09 

/home/badouble/STORE/rawData_v1r0/2012-10 

/home/badouble/STORE/rawData_v1r0/2012-11 

/home/badouble/STORE/rawData_v1r0/2012-12 

/home/badouble/STORE/rawData_v1r0/2013-01 

/home/badouble/STORE/rawData_v1r0/2013-02 

/home/badouble/STORE/rawData_v1r0/2013-03 

Вместо того, чтобы пустой строки она должна напечатать второй элемент array $ ARR.

Почему?

+0

Пожалуйста показать желаемый результат, чтобы сделать его проще для нас! – fedorqui

+0

Давай, тривиален :) –

ответ

0

Вы должны захвата выходного эхо-сигнала в ():

ARR=($(echo $dir | tr "/" " ")) 

или

ARR=(`echo $dir | tr "/" " "`) 

Или обойтись без tr вообще:

ARR=(`echo ${dir//\// }`) 

с помощью подстановки в расширители ion: ${var//from/to} с \/ убежал как «от». Или еще лучше (надежнее), отказаться от суб-процесса в целом:

ARR=(${dir//\/ /}) 
0

Один дополнительные скобки:

ARR=($(echo $dir | tr "/" " ")) 

x=$(command) Это присвоит результат команды к переменной х

x=($(command)) Это сначала выполнит команду, и результат будет сохранен в массиве x

1

Вам не нужно echo или tr.

Чтобы создать массив, просто использовать IFS и read, как показано ниже, что является более эффективным, так как эти оболочки встроенные команды:

IFS=/ read -a ARR <<< "$dir" 
echo "${ARR[1]}" 
+0

Это выглядит очень профессионально, я буду использовать его в своем следующем скрипте ;-) спасибо. –

Смежные вопросы