Этот короткий sed
скрипт может обрабатывать оба типа файлов (или даже смешанные со строками первого и второго типа):
sed '/"/!s/,/\t/g;s/","/\t/g; s/"//g'
Поскольку он не группирует выражения и не зацикливается, он должен быть намного быстрее, чем ваш скрипт.
Похоже, у вас GNU sed
, так что \t
работает, в противном случае вместо этого используйте литерал TAB.
Когда вы вызываете свой скрипт как
./myScript.sh myzip test*
вы передаете скрипту аргументы myzip
, test1
и test2
. Последние два аргумента расширяются из шаблона test*
оболочкой перед фактическим вызовом сценария. Обратите внимание, что test2
будет доступен в $3
, но ваш скрипт никогда не использует $3
.
Вы можете решить это двумя способами:
Выберите имя архива из списка аргументов, затем сдвиньте список, чтобы удалить имя архива из списка позиционных параметров, и, наконец, используйте"$@"
(оставшиеся аргументы )в вызовеzip
:
#!/bin/sh
archive=$1
shift
zip "$archive" "$@"
Поскольку все переменные заключены в кавычки, это также означает, что вы сможете работать с именами файлов, содержащими пробелы и т. д.
С bash
это могло бы быть записано более нечитаемо как
#!/bin/bash
zip "$1" "${@:2}"
Утилита zip
сама знает, как расширять шаблоны подстановки оболочки. Используйте этот факт, чтобы дать скрипту шаблон , а не список имен файлов :
#!/bin/sh
zip "$1" "$2"
Этот скрипт должен называться
./myScript.sh myzip 'test*'
Заключение test*
в кавычки не позволяет оболочке расширять шаблон (, на который мы полагаемся в первой альтернативе ).