Я хочу, чтобы мой сценарий определил пустой массив. значения массива должны быть добавлены, если предопределенное условие становится верным. для этого то, что я сделал,
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
Когда данные настроек в массиве не вызываются с $:
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 по умолчанию оболочка выглядит тире, что вызвало ошибку.
вы также можете написать это так
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