So ordnen Sie ein Arrayelement, das durch Zeilenumbrüche getrennt ist, in einem neuen Array mit mehreren Elementen ab

818
stackunderflow

Ich wähle 4 Dateien in Nemo im Pfad /home/myUsername/.local/share/nemo/scripts/Folder with spaces/. Nemo speichert die Dateipfade in der Umgebungsvariablen NEMO_SCRIPT_SELECTED_FILE_PATHS.

(Wie Sie in der Antwort von glenn jackmanunten sehen können, NEMO_SCRIPT_SELECTED_FILE_PATHSenthält die Liste der Dateipfade eine durch Zeilenumbrüche getrennte Liste.)

Warum ist "Ja!" nicht nach jeder Dateipfadzeile gedruckt? Wie kann ich das erreichen? (Diese Frage ist vielleicht ärgerlich, da ich zunächst dachte, diese Liste von Dateipfaden sei ein Array, was es offensichtlich nicht ist.)

SKRIPT

#!/bin/bash  for i in "$" do echo "$i" echo "Yeah!" done 

AUSGABE

/home/myUsername/.local/share/nemo/scripts/Folder with spaces/script1 /home/myUsername/.local/share/nemo/scripts/Folder with spaces/script2 /home/myUsername/.local/share/nemo/scripts/Folder with spaces/script3 /home/myUsername/.local/share/nemo/scripts/Folder with spaces/script4  Yeah! 
4
Weil Ihr Array nur ein Element enthält. Probieren Sie `echo" $ {# NEMO_SCRIPT_SELECTED_FILE_PATHS [@]} "aus, um zu sehen, wie viele Elemente sich im Array befinden. Bitte zeigen Sie, wie Sie dieses Array füllen. glenn jackman vor 7 Jahren 2
Gute Arbeit, alle Ihre Variablen zu zitieren. Zu oft sehen wir das nicht. glenn jackman vor 7 Jahren 0

1 Antwort auf die Frage

6
glenn jackman

Vorausgesetzt:

  • Die Umgebungsvariable $NEMO_SCRIPT_SELECTED_FILE_PATHSwird von nemo auf magische Weise für Sie eingestellt, und
  • Es enthält eine durch Zeilenumbrüche getrennte Liste von Dateinamen.

Sie können es in ein Bash-Array wie folgt analysieren:

$ NEMO_SCRIPT_SELECTED_FILE_PATHS="file one file two file three"  $ mapfile -t files <<<"$NEMO_SCRIPT_SELECTED_FILE_PATHS"  $ echo ${#files[@]} 3  $ printf ">>%s\n" "$" >>file one >>file two >>file three 

mapfile ist ein bash Builtin-Befehl, der Standardeingaben liest, in Zeilenumbrüche aufteilt und die Zeilen im benannten Array speichert.

Dies unterbricht, wenn einer Ihrer Dateinamen Zeilenumbrüche enthält (ein gültiger Dateiname).