πŸ“œ ИспользованиС подстановки ΠΊΠΎΠΌΠ°Π½Π΄ Π² ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅ Bash

ΠŸΠΎΠ΄ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄ Π½Π° Linux

by itisgood

ΠŸΠΎΠ΄ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄ Π² bash – это Π½Π΅ Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΎΠ΅, ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π²Ρ‹Π²ΠΎΠ΄Π° ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π΄Ρ€ΡƒΠ³ΠΎΠΉ для использования Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… случаях.

Π—Π²ΡƒΡ‡ΠΈΡ‚ слоТно?

ΠŸΠΎΠ·Π²ΠΎΠ»ΡŒΡ‚Π΅ ΠΌΠ½Π΅ привСсти нСбольшой ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

# ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π΄Π°Ρ‚Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ date
current_date=$(date)

# ВывСсти Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π΄Π°Ρ‚Ρƒ
echo "БСгодняшняя Π΄Π°Ρ‚Π°: $current_date"

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ скрипта bash просто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ date ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ current_date.

Π’ дальнСйшСм пСрСмСнная current_date Π±Ρ‹Π»Π° использована Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ echo для Π²Ρ‹Π²ΠΎΠ΄Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π΄Π°Ρ‚Ρ‹.

Если Π²Ρ‹ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ посмотритС, я использовал $(…) Π²ΠΎΠΊΡ€ΡƒΠ³ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ date, которая ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Π»Π° Π²Ρ‹Π²ΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ date ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π»Π° Π΅Π³ΠΎ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ current_date.

Π”Π°, это ΠΎΠ΄ΠΈΠ½ ΠΈΠ· способов подстановки ΠΊΠΎΠΌΠ°Π½Π΄ Π² bash, Π½ΠΎ Π΅ΡΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅.

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим.

Как Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² bash

Π’ bash сущСствуСт Π΄Π²Π° способа Π·Π°ΠΌΠ΅Π½Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄:

  • Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄ΠΎΠ»Π»Π°Ρ€ΠΎΠ²Ρ‹Ρ… скобок $()
  • ИспользованиС ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобок (“)

Π’ этом руководствС я расскаТу ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Π° способа Π·Π°ΠΌΠ΅Π½Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ это ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅.

НачнСм с ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ.

ΠŸΠΎΠ΄ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄ΠΎΠ»Π»Π°Ρ€ΠΎΠ²Ρ‹Ρ… скобок $()

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎΠ»Π»Π°Ρ€ΠΎΠ²Ρ‹Π΅ скобки для подстановки ΠΊΠΎΠΌΠ°Π½Π΄, достаточно ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌΡƒ синтаксису ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

Variable=$(command)

МоТно Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ тСкст для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ здСсь:

Variable="Optional text $(command)"

ΠŸΠΎΠ·Π²ΠΎΠ»ΡŒΡ‚Π΅ ΠΌΠ½Π΅ привСсти простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

Π—Π΄Π΅ΡΡŒ я использовал ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ whoami для поиска Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ вошСдшСго Π² систСму ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ echo:

echo "The current user is: $(whoami)"

МоТно Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ†Π΅Π»ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ

#!/bin/bash

current_user=$(whoami)

echo "The current user is: $current_user"

Если интСрСсно, Ρ‚ΠΎ Π²ΠΎΡ‚ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ послС выполнСния ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹ΡˆΠ΅ cΠΊΡ€ΠΈΠΏΡ‚Π°:

The current user is: $root

Π₯отя Π²Ρ‹Π²ΠΎΠ΄ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² этом скриптС я подставил Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ whoami ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π» Π΅Π³ΠΎ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ current_user.

ПозТС я использовал Π΅Π΅ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ echo.

Π’ качСствС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСсколько подстановок ΠΊΠΎΠΌΠ°Π½Π΄.

НапримСр, здСсь я использовал Π΅Π΅ Π΄Π²Π° Ρ€Π°Π·Π° для ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° echo:

echo "Hello, $(whoami)! You are running this script on $(date)."

Π—Π°ΠΌΠ΅Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Ρ… Π·Π½Π°ΠΊΠΎΠ² (“ )

ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Ρ… Π·Π½Π°ΠΊΠΎΠ² считаСтся ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌ ΠΈ Π² настоящСС врСмя Π½Π΅ рСкомСндуСтся. Однако Π² старых ΠΊΠ½ΠΈΠ³Π°Ρ… Π½Π° Π½Π΅Π³ΠΎ Π΅Ρ‰Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ссылки.

Π­Ρ‚ΠΎ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ способ подстановки ΠΊΠΎΠΌΠ°Π½Π΄ Π² bash.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ Π·Π½Π°ΠΊΠΈ для подстановки ΠΊΠΎΠΌΠ°Π½Π΄, просто слСдуйтС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌΡƒ синтаксису ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

variable=`command`

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ с Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ тСкстом, Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

variable="Additional text `date`"

Для дСмонстрации этого я использовал простой bash-скрипт:

#!/bin/bash

result=`echo "5 + 7" | bc`
echo "The result of the calculation is: $result"

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ скриптС я использовал ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ bc ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π» Π΅Π΅ Π² ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ echo для вычислСния слоТСния Π΄Π²ΡƒΡ… чисСл ΠΈ сохранСния Π΅Π³ΠΎ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ result.

Π’ дальнСйшСм Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±Ρ‹Π» Π²Ρ‹Π²Π΅Π΄Π΅Π½ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° echo.

Π’ΠΎΡ‚ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹ΡˆΠ΅ сцСнария:

The result of the calculation is: 12

ИспользованиС ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Ρ… Π·Π½Π°ΠΊΠΎΠ² для мноТСствСнных Π·Π°ΠΌΠ΅Π½

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ Π·Π½Π°ΠΊΠΈ для Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… подстановок, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис:

result=`command1 \`command2\` command3\`

Π”Π°, ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΌ слСшСм (\).

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ тСкст, Ρ‚ΠΎ это Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

result= `command1 \ "Additional text `command2\` Some more text here `command3\`"`

ΠŸΡ€ΠΎΡ‰Π΅ говоря, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ тСкст Π² любом мСстС синтаксиса ΠΌΠ΅ΠΆΠ΄Ρƒ “”.

НапримСр, здСсь я использовал ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ Π·Π½Π°ΠΊΠΈ для мноТСствСнных подстановок, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π΄Π°Ρ‚Ρƒ ΠΈ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ слоТСниС:

result=`echo "Today is \`date\`, and the result of the calculation is \`echo 5 + 7 | bc\`."`
echo "$result"

см. Ρ‚Π°ΠΊΠΆΠ΅:

You may also like

Leave a Comment