Поскольку все языки сценариев уже приняты, я перейду к C. Очень легко получить переменные среды с помощью функции get_env() (см. Документацию библиотеки GNU C). Остальное - это просто манипуляция персонажами
bash-4.3$ cat get_path.c
#include
#include
#include
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
Но также и потому, что «почему бы нет», вот альтернативная версия python через аргументы командной строки sys.argv
python -c 'import sys; print "\n".join([d for d in sys.argv[1].split(":")])' "$PATH"
Ruby не работает с Ubuntu по умолчанию, в отличие от C-компилятора и интерпретатора Python, но если вы когда-нибудь захотите его использовать, решение в Ruby будет следующим:
ruby -ne 'puts $_.split(":")' <<< "$PATH"
Как было предложено 7stud (Большое спасибо!) в документации GNU C Library , это также можно сократить с помощью
ruby -F: -ane 'puts $F' <<<$PATH
и таким образом
ruby -0072 -ne 'puts chomp' <<<$PATH
Мы можем использовать функцию split() для разбивки строки, считанной в массив, и использовать цикл for-each для печати каждого элемента в отдельной строке.
awk '{split($0,arr,":"); for(var in arr) print arr[var]}' <<< $PATH