Как отобразить пути в $ PATH отдельно

Я не могу понять, как перечислить различные пути в $PATH по отдельности, чтобы они выглядели так:

/bin
/usr/bin
/usr/local/bin

и т. Д.

Кто-нибудь знает правильную переменную для этого?

40
задан 01.04.2015, 07:33

11 ответов

Другой путь AWK состоит в том, чтобы рассматривать каждый каталог как отдельное запись , а не как отдельное поле .

awk 'BEGIN{RS=":"} {print [110]}' <<<"$PATH"

, я нахожу тот синтаксис особенно интуитивным. Но, если Вам нравится, можно сократить его путем создания print [115] неявный (это - действие по умолчанию, и 1 оценивает к истинному, заставляя это быть сделанным для каждой строки):

awk 'BEGIN{RS=":"} 1' <<<"$PATH"

входной и выходной разделитель записей AWK по умолчанию является новой строкой (разрыв строки). Путем установки входного разделителя записей (RS) на : прежде, чем считать вход, AWK автоматически анализирует двоеточие-deliminated $PATH в его constitutent имена каталогов. AWK расширяется [1110] до каждой целой записи, новая строка остается , производит разделитель записей, и никакое цикличное выполнение или gsub не необходимо.

ek@Io:~$ echo "$PATH"
/home/ek/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
ek@Io:~$ awk 'BEGIN{RS=":"} {print [112]}' <<<"$PATH"
/home/ek/bin
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin
/usr/games
/usr/local/games
/snap/bin

AWK часто используется для парсинга записей в отдельные поля, но нет никакой потребности в этом только для построения списка имен каталогов.

Это работает даже на вход, содержащий пробелы (пробелы и вкладки), даже несколько последовательных пробелов:

ek@Io:~$ awk 'BEGIN{RS=":"} {print [113]}' <<< 

таким образом, если Вы не вызываете AWK к [1 118], восстанавливают запись (см. ниже), это не проблема, чтобы иметь пробелы или вкладки (разделители полей по умолчанию) во входе. Ваш PATH, вероятно, не содержит пробелы в системе Ubuntu, но если она сделает, то это будет все еще работать.

<час>

Это стоит упомянуть как примечание стороны, что способность AWK интерпретировать запись как набор полей становится полезной для связанной проблемы построения таблицы компонентов каталога :

ek@Io:~$ awk -F/ 'BEGIN{RS=":"; OFS="\t"} {$1=$1; print [114]}' <<<"$PATH"
        home    ek      bin
        usr     local   sbin
        usr     local   bin
        usr     sbin
        usr     bin
        sbin
        bin
        usr     games
        usr     local   games
        snap    bin

любопытное $1=$1 присвоение служит цели вынудить AWK восстановить запись .

(Это, вероятно, более полезно для случаев, где дополнительная обработка должна быть сделана на компонентах, чем для точного примера, показанного простой печати таблицы.)

ab\t\t c:de fg:h' ab c de fg h

таким образом, если Вы не вызываете AWK к [1 118], восстанавливают запись (см. ниже), это не проблема, чтобы иметь пробелы или вкладки (разделители полей по умолчанию) во входе. Ваш PATH, вероятно, не содержит пробелы в системе Ubuntu, но если она сделает, то это будет все еще работать.

<час>

Это стоит упомянуть как примечание стороны, что способность AWK интерпретировать запись как набор полей становится полезной для связанной проблемы построения таблицы компонентов каталога :

ek@Io:~$ awk -F/ 'BEGIN{RS=":"; OFS="\t"} {$1=$1; print [114]}' <<<"$PATH"
        home    ek      bin
        usr     local   sbin
        usr     local   bin
        usr     sbin
        usr     bin
        sbin
        bin
        usr     games
        usr     local   games
        snap    bin

любопытное $1=$1 присвоение служит цели вынудить AWK восстановить запись .

(Это, вероятно, более полезно для случаев, где дополнительная обработка должна быть сделана на компонентах, чем для точного примера, показанного простой печати таблицы.)

1
ответ дан 03.08.2019, 22:10

Я использую "Функции Пути Bash Stephen Collyer" (см. его статья в Журнале Linux). Это разрешает мне использовать разделенный список "двоеточия" в качестве типа данных в программировании оболочки. Например, я могу произвести список всех каталогов в текущем каталоге:

dirs="";for i in * ; do if [ -d $i ] ; then addpath -p dirs $i; fi; done  

Затем listpath -p dirs производит список.

2
ответ дан 03.08.2019, 22:10

Через awk.

echo $PATH | awk -F: '{for(i=1;i<=NF;i++)print $i}'

Через Python.

$ echo $PATH | python3 -c 'import fileinput
for line in fileinput.input():
    for i in line.split(":"):
        print(i)'

Примечание, что Добавление отступа очень важно в Python.

3
ответ дан 03.08.2019, 22:10
  • 1
    Короче awk: echo $PATH | awk '{gsub(/\:/,"\n");print}' – jarnbjo 15.10.2016, 12:10
  • 2
    I' мм, не уверенное, почему Вы беспокоитесь fileinput, когда Вы могли просто использовать input: python3 -c 'print(*input().split(":"), sep="\n")' <<< "$PATH" – Michael Borgwardt 07.11.2018, 17:16

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

echo $PATH | tr ":" "\n"

так, в Вашем .profile или .bash_profile или что бы то ни было, можно добавить:

alias path='echo $PATH | tr ":" "\n"'

5
ответ дан 03.08.2019, 22:10

В этом ответе:

  1. Python
  2. Ruby C
  3. Альтернативный awk

1. C

Начиная со всех языков сценариев уже был взят, я пойду с C. Довольно легко получить переменные среды с get_env() функция (см. GNU C документация Библиотеки ). Остальное - просто символьное управление

bash-4.3$ cat get_path.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    char *path = getenv("PATH");
    int length = strlen(path) -1;
    for(int i=0;i<=length;i++){
        if (path[i] == ':')
            path[i] = '\n';
        printf("%c",path[i]);
    }
    printf("\n");
    return 0;
}
bash-4.3$ gcc get_path.c
bash-4.3$ ./a.out 
/home/xieerqi/bin
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin
/usr/games
/usr/local/games
/snap/bin
/opt/microchip/xc16/v1.25/bin
/opt/microchip/xc32/v1.40/bin
/opt/microchip/xc8/v1.35/bin
/home/xieerqi/bin
/home/xieerqi/bin/sh
<час>

2. Python

, Но также и потому что, "почему не", вот альтернативная версия Python через параметры командной строки sys.argv

python -c 'import sys; print "\n".join(sys.argv[1].split(":"))' "$PATH"
<час>

3. Ruby

Ruby не идет с Ubuntu по умолчанию, в отличие от компилятора C и интерпретатора Python, но если бы Вы когда-нибудь используете его, решение в Ruby было бы этим:

ruby -ne 'puts 

В этом ответе:

  1. Python
  2. Ruby C
  3. Альтернативный awk

1. C

Начиная со всех языков сценариев уже был взят, я пойду с C. Довольно легко получить переменные среды с get_env() функция (см. GNU C документация Библиотеки ). Остальное - просто символьное управление

[110] <час>

2. Python

, Но также и потому что, "почему не", вот альтернативная версия Python через параметры командной строки sys.argv

[111] <час>

3. Ruby

Ruby не идет с Ubuntu по умолчанию, в отличие от компилятора C и интерпретатора Python, но если бы Вы когда-нибудь используете его, решение в Ruby было бы этим:

[112]

, Как предложено 7stud (Большое спасибо!) в комментарии , это может также быть сокращено с [1 126]

ruby -F: -ane 'puts $F' <<<$PATH

и этот путь

ruby -0072 -ne 'puts chomp' <<<$PATH

4. Альтернативный awk

Мы можем использовать split() функция для повреждения по линии считанный в массив и использование for-each цикл для распечатывания каждого объекта на отдельной строке.

awk '{split([115],arr,":"); for(var in arr) print arr[var]}' <<< $PATH
.split(":")' <<< "$PATH"

, Как предложено 7stud (Большое спасибо!) в комментарии , это может также быть сокращено с [1 126]

ruby -F: -ane 'puts $F' <<<$PATH

и этот путь

ruby -0072 -ne 'puts chomp' <<<$PATH

4. Альтернативный awk

Мы можем использовать split() функция для повреждения по линии считанный в массив и использование for-each цикл для распечатывания каждого объекта на отдельной строке.

awk '{split([115],arr,":"); for(var in arr) print arr[var]}' <<< $PATH
6
ответ дан 03.08.2019, 22:10

Нам нужно больше Java!

public class GetPathByLine {
    public static void main(String[] args) {
        for (String p : System.getenv("PATH").split(":")) {
            System.out.println(p);
        }
    }
}

Сохраняют это к GetPathByLine.java, и использование компиляции:

javac GetPathByLine.java

Выполнение с:

java GetPathByLine
<час>
┌─[17:06:55]─[kazwolfe@BlackHawk]
└──> ~ $ cat GetPathByLine.java 
public class GetPathByLine {
    public static void main(String[] args) {
        for (String p : System.getenv("PATH").split(":")) {
            System.out.println(p);
        }
    }
}
┌─[17:06:58]─[kazwolfe@BlackHawk]
└──> ~ $ javac GetPathByLine.java 
┌─[17:07:02]─[kazwolfe@BlackHawk]
└──> ~ $ java GetPathByLine 
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin
/usr/games
/usr/local/games
/snap/bin
4
ответ дан 03.08.2019, 22:10
  • 1
    Ошеломите это - излишество. Можно сделать это в одной строке в Python 3: python3 -c "import os; [print(p) for p in os.getenv('PATH').split(':')]" – Michael Borgwardt 07.11.2018, 17:11
  • 2
    @wjandrea That' s точка!: D – Michael Borgwardt 08.11.2018, 07:59

Используя xargs:

xargs -n1 -d: <<< $PATH

От man xargs

-n max-args
          Use  at  most  max-args  arguments per command line.

 -d delim
          Input  items  are terminated by the specified character.
14
ответ дан 03.08.2019, 22:10
  • 1
    был бы изменение на этом, такой как echo $PATH | xargs -n1 -d: echo быть избыточным или это doesn' t вопрос? – Eduardo Cuomo 03.04.2015, 20:59
  • 2
    @Serg echo $PATH | xargs -n1 -d: сделает то же самое для Вас, но Вы будете использовать еще одну оболочку. Первый оценит echo $PATH и передаст вывод по каналу для следующего окружения, чтобы сделать остальных. – Neeraj Shukla 08.04.2015, 01:46

Вот эквивалент в Движении:

$ cat path.go
package main

import (
    "fmt"
    "os"
    "strings"
)

func main() {
    for _, p := range strings.Split(os.Getenv("PATH"), ":") {
        fmt.Println(p)
    }
}

$ go run path.go
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin
/usr/games
/usr/local/games
/snap/bin
/home/nathan/.local/bin
/home/nathan/go/bin
7
ответ дан 03.08.2019, 22:10

Используя IFS:

(set -f; IFS=:; printf "%s\n" $PATH)

IFS содержит символы, на которых удар делает разделение, таким образом, IFS с : заставляет удар разделить расширение $PATH на :. printf циклы аргументы по строке формата, пока аргументы не исчерпываются. Мы должны отключить globbing (подстановочное расширение) использование set -f так, чтобы подстановочные знаки в именах каталогов ПУТИ не становились расширенными.

26
ответ дан 03.08.2019, 22:10
  • 1
    Это работает правильно с обратными косыми чертами и пробелами! – laughing_man 24.03.2015, 00:33

Используйте удар Расширение Параметра :

echo "${PATH//:/ 

Это заменяет весь : в $PATH новой строкой (\n) и печатает результат. Содержание $PATH остается неизменным.
, Если Вы только хотите заменить первое :, удалите вторую наклонную черту: echo -e "${PATH/:/\n}"

\n'}"

Это заменяет весь : в $PATH новой строкой (\n) и печатает результат. Содержание $PATH остается неизменным.
, Если Вы только хотите заменить первое :, удалите вторую наклонную черту: echo -e "${PATH/:/\n}"

59
ответ дан 03.08.2019, 22:10
  • 1
    Я думаю, что это - лучшее решение потому что it' s сделанный в чистый удар. – Joachim Sauer 23.03.2015, 10:43
  • 2
    @ryanmjacobs, мягко любопытный: что Вы думаете мое использование решения?: D – Ahmad Hajjar 23.03.2015, 18:27
  • 3
    объясните, как это работает. – leventov 24.03.2015, 01:40
  • 4
    What' s такая названная операция? It' s подобный sed, но it' s не sed. What' s название его так я могу искать сеть больше информации об этом. – Michael Borgwardt 24.03.2015, 07:08
  • 5
    Перейдите по ссылке (Расширение Параметра) в моем ответе и прокрутите вниз для длительности второго названного раздела: ${parameter/pattern/string} – Alex 24.03.2015, 07:18

Вот еще несколько подходов. Я использую PATH с каталогами, содержащими обратные косые черты, пробелы и даже новую строку, чтобы показать, что они должны работать с чем-либо (кроме cut тот, который перестал работать на новых строках):

$ echo "$PATH"
/bin:usr/bin/:/usr/local/bin:/some\ horrible thing:/even 
new lines
  • Некоторый Perl пути:

    $ perl -pe 's/:/\n/g' <<<"$PATH"
    /bin
    usr/bin/
    /usr/local/bin
    /some\ horrible thing
    /even 
    new lines
    

    Эти -p означает, "печатают каждую входную строку после применения сценария, данного [1 111]". Сценарий использует оператор (s/oldnew/) замены для замены всего : новыми строками.

    $ perl -lne 'print for split /:/' <<<"$PATH"
    /bin
    usr/bin/
    /usr/local/bin
    /some\ horrible thing
    /even 
    new lines
    

    Эти -l добавляет новую строку к каждому print вызов. Здесь, сценарий разделяет свой вход на [1 116] и затем циклы по каждому элементу разделения и печатает его.

    $ perl -F: -ane '$"="\n";print "@F"' <<<"$PATH"
    /bin
    usr/bin/
    /usr/local/bin
    /some\ horrible thing
    /even 
    new lines
    

    Эти -a делает perl, ведут себя как [1 119]: это разделит каждую из своих входных строк на символе, данном [1 120] (так :, здесь), и сохранит результат в массиве @F. Эти $" специальная переменная Perl, "разделитель элементов списка", значение которого печатается между каждым элементом печатного списка. Так установка его к новой строке сделает print @list печать каждый элемент [1 125] и затем новая строка. Здесь, мы используем его для печати @F.

    $ perl -F: -ane 'print join "\n", @F' <<<"$PATH"
    /bin
    usr/bin/
    /usr/local/bin
    /some\ horrible thing
    /even 
    new lines
    

    Та же идея как выше, просто менее игравший в гольф. Вместо того, чтобы использовать $", мы явно join луг массив с новыми строками и затем печатью.

  • Простой grep с волшебством PCRE:

    $ grep -oP '(^|:)\K[^:]+' <<<"$PATH"
    /bin
    usr/bin/
    /usr/local/bin
    /some\ horrible thing
    /even 
    new lines
    

    Эти -o делает grep печать только часть соответствия каждой строки, таким образом, каждое соответствие печатается на отдельной строке. Эти -P включает Perl совместимые регулярные выражения (PCRE). regex ищет фрагменты не - : ([^:]+), которые следуют или за началом строки (^) или : символ. Эти \K прием PCRE, который означает "отбрасывание что-либо подобранное перед этой точкой" и используется здесь, чтобы не печатать : также.

  • И cut решение (эти сбои на новых строках, но может иметь дело с обратными косыми чертами и пробелами):

    $ cut -d: -f 1- --output-delimiter= 

    используемые опции -d:, который устанавливает входной разделитель на [1 141], -f 1-, что означает, печатают все поля (от 1-го в конец) и --output-delimiter=, который устанавливает, ну, в общем, выходной разделитель. Эти ANSI C заключение в кавычки и способ распечатать символ новой строки в оболочке.

Во всех вышеупомянутых примерах, я использую удар (и некоторые другие оболочки) здесь строка оператор (<<<) для передачи строки как входа к программе. Так command <<<"foo" эквивалентно [1 147]. Обратите внимание, что я всегда заключаю в кавычки "$PATH" без кавычек, оболочка съела бы символ новой строки.

<час>

@7stud дал другой подход в [1 168] комментарии , это просто слишком хорошо для не включения:

$ perl -0x3a -l012 -pe '' <<<"$PATH"

Это - то, что известно как [1 169] игра в гольф . Эти -0 указывает входной разделитель записей как восьмеричное или шестнадцатеричное число. Это - то, что определяет "строку", и ее значение по умолчанию \n, символ новой строки. Здесь, мы устанавливаем его на :, который является x3a в шестнадцатеричном числе (попытка printf '\x3a\n'). Эти -l делает три вещи. Сначала это удаляет входной разделитель записей ($/) из конца каждого line— эффективно удаление : here— и во-вторых, это устанавливает выходной разделитель записей ($\) на любое восьмеричное или шестнадцатеричное значение, которое это дано (012, \n). Если $\ определяется, это добавляется в конец каждого print вызов, таким образом, это приведет к новой строке, добавленной каждому print.

Эти -pe будет print каждая входная строка после применения сценария, данного [1 164]. Здесь нет никакого сценария, потому что вся работа сделана флагами опции, как описано выше!

\n'
ANSI C заключение в кавычки и способ распечатать символ новой строки в оболочке.

Во всех вышеупомянутых примерах, я использую удар (и некоторые другие оболочки) здесь строка оператор (<<<) для передачи строки как входа к программе. Так command <<<"foo" эквивалентно [1 147]. Обратите внимание, что я всегда заключаю в кавычки "$PATH" без кавычек, оболочка съела бы символ новой строки.

<час>

@7stud дал другой подход в [1 168] комментарии , это просто слишком хорошо для не включения:

[117]

Это - то, что известно как [1 169] игра в гольф . Эти -0 указывает входной разделитель записей как восьмеричное или шестнадцатеричное число. Это - то, что определяет "строку", и ее значение по умолчанию \n, символ новой строки. Здесь, мы устанавливаем его на :, который является x3a в шестнадцатеричном числе (попытка printf '\x3a\n'). Эти -l делает три вещи. Сначала это удаляет входной разделитель записей ($/) из конца каждого line— эффективно удаление : here— и во-вторых, это устанавливает выходной разделитель записей ($\) на любое восьмеричное или шестнадцатеричное значение, которое это дано (012, \n). Если $\ определяется, это добавляется в конец каждого print вызов, таким образом, это приведет к новой строке, добавленной каждому print.

Эти -pe будет print каждая входная строка после применения сценария, данного [1 164]. Здесь нет никакого сценария, потому что вся работа сделана флагами опции, как описано выше!

\n'
, который устанавливает, ну, в общем, выходной разделитель. Эти ANSI C заключение в кавычки и способ распечатать символ новой строки в оболочке.

Во всех вышеупомянутых примерах, я использую удар (и некоторые другие оболочки) здесь строка оператор (<<<) для передачи строки как входа к программе. Так command <<<"foo" эквивалентно [1 147]. Обратите внимание, что я всегда заключаю в кавычки "$PATH" без кавычек, оболочка съела бы символ новой строки.

<час>

@7stud дал другой подход в [1 168] комментарии , это просто слишком хорошо для не включения:

[117]

Это - то, что известно как [1 169] игра в гольф . Эти -0 указывает входной разделитель записей как восьмеричное или шестнадцатеричное число. Это - то, что определяет "строку", и ее значение по умолчанию \n, символ новой строки. Здесь, мы устанавливаем его на :, который является x3a в шестнадцатеричном числе (попытка printf '\x3a\n'). Эти -l делает три вещи. Сначала это удаляет входной разделитель записей ($/) из конца каждого line— эффективно удаление : here— и во-вторых, это устанавливает выходной разделитель записей ($\) на любое восьмеричное или шестнадцатеричное значение, которое это дано (012, \n). Если $\ определяется, это добавляется в конец каждого print вызов, таким образом, это приведет к новой строке, добавленной каждому print.

Эти -pe будет print каждая входная строка после применения сценария, данного [1 164]. Здесь нет никакого сценария, потому что вся работа сделана флагами опции, как описано выше!

\n'
ANSI C заключение в кавычки и способ распечатать символ новой строки в оболочке.

Во всех вышеупомянутых примерах, я использую удар (и некоторые другие оболочки) здесь строка оператор (<<<) для передачи строки как входа к программе. Так command <<<"foo" эквивалентно [1 147]. Обратите внимание, что я всегда заключаю в кавычки "$PATH" без кавычек, оболочка съела бы символ новой строки.

<час>

@7stud дал другой подход в [1 168] комментарии , это просто слишком хорошо для не включения:

[117]

Это - то, что известно как [1 169] игра в гольф . Эти -0 указывает входной разделитель записей как восьмеричное или шестнадцатеричное число. Это - то, что определяет "строку", и ее значение по умолчанию \n, символ новой строки. Здесь, мы устанавливаем его на :, который является x3a в шестнадцатеричном числе (попытка printf '\x3a\n'). Эти -l делает три вещи. Сначала это удаляет входной разделитель записей ($/) из конца каждого line— эффективно удаление : here— и во-вторых, это устанавливает выходной разделитель записей ($\) на любое восьмеричное или шестнадцатеричное значение, которое это дано (012, \n). Если $\ определяется, это добавляется в конец каждого print вызов, таким образом, это приведет к новой строке, добавленной каждому print.

Эти -pe будет print каждая входная строка после применения сценария, данного [1 164]. Здесь нет никакого сценария, потому что вся работа сделана флагами опции, как описано выше!

\n' <<<"$PATH" /bin usr/bin/ /usr/local/bin /some\ horrible thing /even new lines

используемые опции -d:, который устанавливает входной разделитель на [1 141], -f 1-, что означает, печатают все поля (от 1-го в конец) и --output-delimiter=, который устанавливает, ну, в общем, выходной разделитель. Эти ANSI C заключение в кавычки и способ распечатать символ новой строки в оболочке.

Во всех вышеупомянутых примерах, я использую удар (и некоторые другие оболочки) здесь строка оператор (<<<) для передачи строки как входа к программе. Так command <<<"foo" эквивалентно [1 147]. Обратите внимание, что я всегда заключаю в кавычки "$PATH" без кавычек, оболочка съела бы символ новой строки.

<час>

@7stud дал другой подход в [1 168] комментарии , это просто слишком хорошо для не включения:

$ perl -0x3a -l012 -pe '' <<<"$PATH"

Это - то, что известно как [1 169] игра в гольф . Эти -0 указывает входной разделитель записей как восьмеричное или шестнадцатеричное число. Это - то, что определяет "строку", и ее значение по умолчанию \n, символ новой строки. Здесь, мы устанавливаем его на :, который является x3a в шестнадцатеричном числе (попытка printf '\x3a\n'). Эти -l делает три вещи. Сначала это удаляет входной разделитель записей ($/) из конца каждого line— эффективно удаление : here— и во-вторых, это устанавливает выходной разделитель записей ($\) на любое восьмеричное или шестнадцатеричное значение, которое это дано (012, \n). Если $\ определяется, это добавляется в конец каждого print вызов, таким образом, это приведет к новой строке, добавленной каждому print.

Эти -pe будет print каждая входная строка после применения сценария, данного [1 164]. Здесь нет никакого сценария, потому что вся работа сделана флагами опции, как описано выше!

\n'
ANSI C заключение в кавычки и способ распечатать символ новой строки в оболочке.

Во всех вышеупомянутых примерах, я использую удар (и некоторые другие оболочки) здесь строка оператор (<<<) для передачи строки как входа к программе. Так command <<<"foo" эквивалентно [1 147]. Обратите внимание, что я всегда заключаю в кавычки "$PATH" без кавычек, оболочка съела бы символ новой строки.

<час>

@7stud дал другой подход в [1 168] комментарии , это просто слишком хорошо для не включения:

[117]

Это - то, что известно как [1 169] игра в гольф . Эти -0 указывает входной разделитель записей как восьмеричное или шестнадцатеричное число. Это - то, что определяет "строку", и ее значение по умолчанию \n, символ новой строки. Здесь, мы устанавливаем его на :, который является x3a в шестнадцатеричном числе (попытка printf '\x3a\n'). Эти -l делает три вещи. Сначала это удаляет входной разделитель записей ($/) из конца каждого line— эффективно удаление : here— и во-вторых, это устанавливает выходной разделитель записей ($\) на любое восьмеричное или шестнадцатеричное значение, которое это дано (012, \n). Если $\ определяется, это добавляется в конец каждого print вызов, таким образом, это приведет к новой строке, добавленной каждому print.

Эти -pe будет print каждая входная строка после применения сценария, данного [1 164]. Здесь нет никакого сценария, потому что вся работа сделана флагами опции, как описано выше!

\n'
, который устанавливает, ну, в общем, выходной разделитель. Эти ANSI C заключение в кавычки и способ распечатать символ новой строки в оболочке.

Во всех вышеупомянутых примерах, я использую удар (и некоторые другие оболочки) здесь строка оператор (<<<) для передачи строки как входа к программе. Так command <<<"foo" эквивалентно [1 147]. Обратите внимание, что я всегда заключаю в кавычки "$PATH" без кавычек, оболочка съела бы символ новой строки.

<час>

@7stud дал другой подход в [1 168] комментарии , это просто слишком хорошо для не включения:

[117]

Это - то, что известно как [1 169] игра в гольф . Эти -0 указывает входной разделитель записей как восьмеричное или шестнадцатеричное число. Это - то, что определяет "строку", и ее значение по умолчанию \n, символ новой строки. Здесь, мы устанавливаем его на :, который является x3a в шестнадцатеричном числе (попытка printf '\x3a\n'). Эти -l делает три вещи. Сначала это удаляет входной разделитель записей ($/) из конца каждого line— эффективно удаление : here— и во-вторых, это устанавливает выходной разделитель записей ($\) на любое восьмеричное или шестнадцатеричное значение, которое это дано (012, \n). Если $\ определяется, это добавляется в конец каждого print вызов, таким образом, это приведет к новой строке, добавленной каждому print.

Эти -pe будет print каждая входная строка после применения сценария, данного [1 164]. Здесь нет никакого сценария, потому что вся работа сделана флагами опции, как описано выше!

\n'
ANSI C заключение в кавычки и способ распечатать символ новой строки в оболочке.

Во всех вышеупомянутых примерах, я использую удар (и некоторые другие оболочки) здесь строка оператор (<<<) для передачи строки как входа к программе. Так command <<<"foo" эквивалентно [1 147]. Обратите внимание, что я всегда заключаю в кавычки "$PATH" без кавычек, оболочка съела бы символ новой строки.

<час>

@7stud дал другой подход в [1 168] комментарии , это просто слишком хорошо для не включения:

[117]

Это - то, что известно как [1 169] игра в гольф . Эти -0 указывает входной разделитель записей как восьмеричное или шестнадцатеричное число. Это - то, что определяет "строку", и ее значение по умолчанию \n, символ новой строки. Здесь, мы устанавливаем его на :, который является x3a в шестнадцатеричном числе (попытка printf '\x3a\n'). Эти -l делает три вещи. Сначала это удаляет входной разделитель записей ($/) из конца каждого line— эффективно удаление : here— и во-вторых, это устанавливает выходной разделитель записей ($\) на любое восьмеричное или шестнадцатеричное значение, которое это дано (012, \n). Если $\ определяется, это добавляется в конец каждого print вызов, таким образом, это приведет к новой строке, добавленной каждому print.

Эти -pe будет print каждая входная строка после применения сценария, данного [1 164]. Здесь нет никакого сценария, потому что вся работа сделана флагами опции, как описано выше!

7

Теги

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