Явное объявление массива выполняется с помощью встроенной функции declare:
declare -a ARRAYNAME
Переменные массива также могут быть созданы с использованием составных присваиваний в следующем формате:
ARRAY=(value1 value2 ... valueN)
в вашем случае:
#!/bin/bash
str='014387650'
declare -a A
for (( c=0; c<${#str}; c++ ))
do
A[c]=`echo ${str:0:$(( $c + 1 ))}`
echo "A[$c]="${A[$c]}
done
output:
A[0]=0
A[1]=01
A[2]=014
A[3]=0143
A[4]=01438
A[5]=014387
A[6]=0143876
A[7]=01438765
A[8]=014387650
если вы просто хочу поместить строку в массив:
declare -a A
str=014387650
A=${str[*]}
echo ${A[*]}
014387650
echo ${A[3]}
4
Я думаю, я знаю, о чем вы спрашиваете, но я не хочу делать предположения, которые окажутся ложными. Итак, вот они ---, пожалуйста, исправьте их соответствующим образом.
./node_modules/.bin/
является файлом Shebang. Нет необходимости проверять расширения файлов, не говоря уже об открытии каждого файла и проверке, начинается ли он с шебанга. Принимая во внимание это предположение, первым делом я попытаюсь решить вашу проблему с помощью цикла оболочки, подобного следующему:
for SCRIPT in./node_modules/.bin/* ; do
BN=$(basename "$SCRIPT")
ln -s "$SCRIPT" "$BN"
done
Надеюсь, это работает для вас, плюс-минус пара опечаток.
РЕДАКТИРОВАТЬ :Спасибо, что приняли мой ответ, но критика пользователя Stéphane Chazelas хорошо принята -. Хотя я успешно протестировал цикл в каталоге, полном скриптов (из пустого каталога ), он прав, заметив, что в других случаях он может дать сбой, и что цикл на самом деле не улучшается по сравнению с простымln -s./node_modules/.bin/*./