Общий доступ к sysfs

Комбинация echo и xargs здесь довольно любопытны.

basename принимает путь в командной строке и выводит его последний компонент (то есть, как правило, часть после последней косой черты). xargs просто помещает здесь слова, прочитанные со своего входа (конвейера), в командную строку basename . Так почему бы просто не использовать basename $ 1 ?

Однако есть разница.

В эхо 1 $ | xargs -n 1 basename , если параметр $ 1 содержит пробелы, xargs разделит его на пробелы и вызовет basename для каждого слова отдельно. Конечным результатом будет то, что часть имени файла будет выбрана для всех слов, как показал Арминий .

Другой вариант, basename $ 1 , вызовет basename только один раз (и не удастся некоторым приятным образом из-за разбиения слов.)

Если команда должна только обрабатывать одно имя файла, лучше было бы записать его как:

file=$(basename "$1" | cut -d '.' -f 1)

С кавычками. (или используя расширение оболочки с удалением суффикса $ {file %%. *} вместо cut , как Кусалананда показал .)

Если, на с другой стороны, он должен обрабатывать несколько имен файлов, может быть проще передать их с помощью массива или в позиционных параметрах (все они, а не только $ 1 ).

1
08.08.2016, 10:06
0 ответов

Теги

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