Переменная внутри другой переменной

Первая строка (, называемая 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.

1
11.11.2020, 22:55
1 ответ

Нетрудно выполнить то, о чем вы просили:

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

1
18.03.2021, 22:50

Теги

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