كيفية إعادة صفيف من وظيفة مع قذيفة السمك

StackOverflow https://stackoverflow.com/questions/19835108

  •  25-07-2022
  •  | 
  •  

سؤال

أحاول إعادة صفيف من وظيفة. الكود أدناه لا يعمل.

function testArray
   echo 1 2 3 4
end

set r (testArray)

echo $r[2]
# error

ما هي الطريقة المناسبة لإرجاع قيم متعددة من وظيفة باستخدام قذيفة السمك؟

هل كانت مفيدة؟

المحلول 2

كما أوضح من قبل سخرية يمكنك استخدام آلية تقسيم الخط الأصلي.

تصبح نتيجة استبدال الأمر قائمة عن طريق الانقسام على الخطوط الجديدة ($IFS)

لذا

  1. قائمة عنصر واحد لكل سطر ؛
  2. ثم التقاط ذلك في استبدال القيادة.

قائمة

function __list_public_keys
    for key in ~/.ssh/*.pub
        echo $key
    end
end
انتاج
$ __list_public_keys
/home/ed8/.ssh/id_rsa.blabla.pub
/home/ed8/.ssh/id_rsa.pub
/home/ed8/.ssh/id_rsa.test.pub

اسر

function __add_keys
    set keys (__list_public_keys)

    echo "[" $keys "]"
end
انتاج
$ __add_keys
[/home/ed8/.ssh/id_rsa.blabla.pub] [/home/ed8/.ssh/id_rsa.pub] [/home/ed8/.ssh/id_rsa.test.pub]

نصائح أخرى

تصبح نتيجة استبدال الأوامر قائمة من خلال الانقسام على الخطوط الجديدة (من الناحية الفنية محتويات $IFS, ، ولكن تعديل IFS هو الإحباط).

لذلك يمكنك استبدال المساحات بالخطوط الجديدة ، ربما مع tr:

function testArray
   echo 1 2 3 4
end
set r (testArray | tr ' ' \n)
echo $r[2]

أو تعديل الوظيفة لإخراج الخطوط الجديدة مباشرة:

function testArray
   echo \n1\n2\n3\n4
end
set r (testArray)
echo $r[2]

https://github.com/fish-shell/fish-shell/issues/445 يتتبع آليات أفضل لتوليد القوائم.

لا أعتقد أن هذا ممكن بعد. قارن هذا القضية على جيثب.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top