SymLink Все Shebangs в Node_Modules / .bin к текущей папке

Явное объявление массива выполняется с помощью встроенной функции 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
0
08.01.2019, 12:50
1 ответ

Я думаю, я знаю, о чем вы спрашиваете, но я не хочу делать предположения, которые окажутся ложными. Итак, вот они ---, пожалуйста, исправьте их соответствующим образом.

  • Я предполагаю, что каждый файл в ./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/*./

0
28.01.2020, 04:04

Теги

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