Я видел руководства по написанию сценариев Bash, предлагающие использовать массив для работы с именами файлов, содержащими пробелы. DashAsBinSh, однако, предполагает, что массивы не являются переносимыми, поэтому я ищу POSIX-совместимый способ работы со списками имен файлов, которые могут содержать пробелы.
Я хочу изменить приведенный ниже пример сценария, чтобы он echo
foo/target/a.jar
foo/target/b.jar
bar/target/lol whitespace.jar
Вот сценарий
#!/usr/bin/env sh
INPUT="foo/target/a.jar
foo/target/b.jar
bar/target/b.jar
bar/target/lol whitespace.jar"
# this would be produced by a 'ls' command
# We can execute the ls within the script, if it helps
dostuffwith() { echo $1; };
F_LOCATIONS=$INPUT
ALL_FILES=$(for f in $F_LOCATIONS; do echo `basename $f`; done)
ALL_FILES=$(echo "$ALL_FILES" | sort | uniq)
for f in $ALL_FILES
do
fpath=$(echo "$F_LOCATIONS" | grep -m1 $f)
dostuffwith $fpath
done