Первая строка (, называемая shebang ), сообщает, какой интерпретатор следует использовать для выполнения этого файла. Ответ, отмеченный steeldriver как «Связанный», более подробно расскажет вам, что происходит.
Итак, если вы начнете с
#!/bin/bash
bash
используется для интерпретации этого файла. Другими распространенными пускателями являются #!/usr/bin/perl
или #!/usr/bin/python
. Но это не ограничивается этим; если вы создаете файл tst
с
#!/usr/bin/vi
jantje zag eens pruimen hangen
oh als eieren zo groot
, сделайте этот исполняемый файл(chmod +x tst
)и запустите его (./tst
), он запустит -vi для редактирования файла.
Следующая часть вопроса заключалась в том, что произойдет, если в первой строке нет шебанга. Ответ заключается в том, что будет использоваться используемый в настоящее время интерпретатор. В качестве демонстрации :создайте файл tst
с:
ps -f
(никаких манипуляций, только одна строка ), сделайте этот исполняемый файл(chmod +x tst
)и выполните его(./tst
). Результат будет примерно таким:
ljm@phi:~$./tst
UID PID PPID C STIME TTY TIME CMD
ljm 1379 1377 0 Oct06 pts/3 00:00:00 -bash
ljm 20769 1379 0 10:34 pts/3 00:00:00 -bash
ljm 20770 20769 0 10:34 pts/3 00:00:00 ps -f
(1379 — это моя текущая оболочка, 20769 — это bash, который используется для интерпретации tst
, и, следовательно, это родительский (PPID )ps)
Если я запущу sh
и снова выполню tst
, я увижу следующее:
ljm@phi:~$ sh
$./tst
UID PID PPID C STIME TTY TIME CMD
ljm 1379 1377 0 Oct06 pts/3 00:00:00 -bash
ljm 20773 1379 0 10:34 pts/3 00:00:00 sh
ljm 20774 20773 0 10:34 pts/3 00:00:00 /bin/sh./tst
ljm 20775 20774 0 10:34 pts/3 00:00:00 ps -f
$
Итак, теперь sh
используется для интерпретации tst
.
Нетрудно выполнить то, о чем вы просили:
a1=0.017
a2=0.2
a3=10.7
a4=20.9
a5=35.4
for ((x = 1; x <= 5; x++)); do
var="a${x}"
echo "Welcome ${!var} times"
done
Было бы проще сделать a
переменной-массивом, хотя:
a=(
0.017
0.2
10.7
20.9
35.4
)
for x in "${a[@]}"; do
echo "Welcome ${x} times"
done