как управлять массивом в сценарии оболочки

Я хочу, чтобы мой сценарий определил пустой массив. значения массива должны быть добавлены, если предопределенное условие становится верным. для этого то, что я сделал,

declare -a FILES
file_count=0
if [ "$file_ext" != "$SUPPORTED_FILE_TYPE" ] ; then
        echo "$file_ext is not supported for this task."
else
        $FILES[$file_count] = $filename
        file_count=$file_count+1
fi

при выполнении этого сценария я получаю некоторую ошибку как это

linux-softwares/launchers/join_files.sh: 51: [0]: not found
6
задан vijay.shad 28 February 2010 в 20:26
поделиться

2 ответа

Когда данные настроек в массиве не вызываются с $:

declare -a FILES
file_count=0
if [ "$file_ext" != "$SUPPORTED_FILE_TYPE" ] ; then
        echo "$file_ext is not supported for this task."
else
        FILES[$file_count]=$filename
        file_count=$file_count+1
fi

ФАЙЛЫ без $.


Это работает для меня:

#!/bin/bash
declare -a FILES
file_count=0

file_ext='jpg'
SUPPORTED_FILE_TYPE='jpg'
filename='test.jpg'

if [ "$file_ext" != "$SUPPORTED_FILE_TYPE" ] ; then
        echo "$file_ext is not supported for this task."
else
        FILES[$file_count]=$filename
        file_count=$(($file_count+1))
fi

Как вы видите, небольшая модификация $ (()) для математической операции, но назначения ФАЙЛОВ такие же ...


Как было указано после множества тестов, Ubuntu по умолчанию оболочка выглядит тире, что вызвало ошибку.

3
ответ дан 17 December 2019 в 07:03
поделиться

вы также можете написать это так

declare -a FILES
file_count=0
if [ "$file_ext" != "$SUPPORTED_FILE_TYPE" ] ; then
        echo "$file_ext is not supported for this task."
else
        FILES[((file_count++))]=$filename
fi

To: Vijay

крошечная демонстрация, перечислите файлы * .txt в каталоге и поместите в массив FILES

declare -a FILES
i=0
for file in *.txt
do
  FILES[((i++))]=$file 
done
# display the array
for((o=0;o<${#FILES};o++))
do
    echo ${FILES[$o]} $o
done

output

$ ./shell.sh
A.txt 0
B.txt 1
file1.txt 2
file2.txt 3
file3.txt 4
0
ответ дан 17 December 2019 в 07:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: