Способы сохранять вывод команды в переменной

Два сомнения, может быть простые и очень простые:

1 - Недавно я начал работать с bash и с начала я работаемый с $ (командой), чтобы сохранять выводы команд, но я пророс с этой синтаксис: я 'командую', в большинстве blogs и pdf, который я прочитал, использует первую, даже они упоминают, что правильная форма эта, но вторая форма я вижу, что он делает точно то же самое, тогда: Каковым состоит различие в том, чтобы использовать первую и вторую форму?

2 - Каково намерение знаков { }, чтобы печатать переменную, так как без них я начинаю "$ ls_1" или с ними я начинаю "$ {ls_1}" такой же формы вывод команды?

ls_1=`ls -ltrh | grep bash`
echo "$ls_1"
echo "--------------------"
echo "${ls_1}"
echo "--------------------"

echo "********************"
ls_2=$(ls -ltrh | grep bash)
echo "$ls_2"
echo "--------------------"
echo "${ls_2}"
echo "--------------------"

Заранее спасибо за разъяснения.

PD: Мне не дали manita внизу jejeje, равный звук простые сомнения, но это сомнения

2
задан 07.03.2019, 11:21
2 ответа

Как man 1 bash покажи.

Относительно твоего первого вопроса

Комманд Субститутион

Command substitution allows the output of a command to replace the command name.  
There are two forms:
    $(command)
or
    `command`
(...)
When  the  old-style backquote form of substitution is used, backslash retains its literal
meaning except when followed by $, `, or \.  The first backquote not preceded by a backslash 
terminates the command substitution.  When using the $(command) form, all characters between 
the parentheses make up the command; none are treated specially.
Command substitutions may be nested.  To nest when using the backquoted form, escape the 
inner backquotes with backslashes.

Ambas очень сходные, используются для той же самой funciГіn, но у них есть pequeГ±as различия.

Относительно укрытого выполнения, как он показывается, чтобы гнездиться используя backquotes , ты они должен убегать.

$ echo `echo \`echo hola\``  # En este ejemplo escapamos.
hola
$ echo $(echo $(echo hola))  # En ese ejemplo no.
hola

Относительно, поскольку изменяет значение backslash, я помещаю пример.

$ echo `echo \\$hola`  #  Aqui es necesario poner otro "\" frente al "\" para que sea tratado
                       #+ de forma especial y escape el signo "$".
$hola
$ echo $(echo \$hola)  #  En este caso no hay problema, "\" escapa al signo "$"
$hola

Относящиеся к утечкам, как ты podrГЎs отчитаться раньше, состоит problemГЎtico в том, чтобы гнездиться и убегать с синтаксисом backquote.

$ echo $(echo \`hola)
`hola
$ echo `echo \\\`hola `  # Esto es insano
`hola

Других примеров:

$ echo "`echo \"hola\"`"
hola
$ echo `echo \"hola\"`     # Aqui si muestra las comillas dobles
"hola"
$ echo "`echo \\"hola\\"`" # Pero aqui, entrecomillado, hay que escapar el backslash
"hola"
$ echo $(echo \"hola\")    # En cambio, es mas comodo tratar con la sintaxis
"hola"                     # de $()
$ echo "$(echo \"hola\")"  
"hola"

Относительно твоего второго вопроса

В том же самом man 1 bash

Есть раздел на Parameter расширение

${parameter}
    The  value  of  parameter is substituted.  The braces are required when
    parameter is a positional parameter with more than one digit,  or  when
    parameter  is followed by a character which is not to be interpreted as
    part of its name.  The parameter is  a  shell  parameter  as  described
    above PARAMETERS) or an array reference (Arrays).

, Где ${var1} - форма mГЎs bГЎsica expansiГіn parГЎmetro var1. Но, из-за asГ - говорить ${var1} защищает в переменную var1. Костлявая, они производят то же самое, эквивалентные, но не точно звук то же самое. В первой realizГі parameter расширение с Вашими потенциалами caracterГ-sticas, во втором случае, Гєnicamente sustituyГі стоимость переменной var1. Однако, в каждой этой secciГіn есть инструкции свойств, которые у него есть.

Пример этот. Это модальность, которая должна распределять стандартную настройку в переменную.

#!/bin/bash 
unset v
echo "La variable v no existe: $v"

v=${v:=hola}  # Ahora, si no existe entonces adquiere el valor por defecto "hola"
echo "La variable v ya existe: $v"

v=${v:=adios}  # Pero si la intentas modificar de esta manera, estando ya definida, no podras.
echo "La variable v en lugar de ser 'adios' es: $v"

Давая как результат:

$ ./prueba
La variable v no existe:
La variable v ya existe: hola
La variable v en lugar de ser 'adios' es: hola

Другое очень общее использование расширения - с arrays . Например.

$ declare -a array1=( valor1 valor2 valor3 )
$ echo ${array1[@]}  # Expande los valores.
valor1 valor2 valor3
$ echo ${#array1[@]} # Muestra el tamano
3
$ echo ${!array1[@]} # Muestra las keys
0 1 2
1
ответ дан 19.11.2019, 22:27
  • 1
    Спасибо за aclaració n, это факт, что я чувствую себя má s có способ с $ (командой) из-за возможности использования в цели символы, но это было причиняющее беспокойство сомнение, относительно $ { } не знало Ваш потенциал для manipulació n вышеупомянутой переменной. – arquitectura_deldesastre 07.03.2019, 13:02

использование $(command) vs `comand` одинокое из-за вопросов возможности, так как использование `command` немного трудное для клавиатур в espa; ol.

и sixtasis $(command) гораздо более практический и простой.
, вне которых он присутствует во многих других языках costumbres.

meintras ${var} vs $var - exatamente равные в неких случаях
использование квадратных скобок - это, чтобы решать ее ambigГјedad в выражениях:

var="carro"
echo "${var}ceria"

то, что внутри квадратных скобок, будет принято как изменчивое и оставшаяся часть как текст

в то время как:

var="carro"
echo "$varceria"

ничего не напечатает, так как он возьмет все слово как имя переменной.

использование себе должен больше frequente первой в это

это не является только присутствующим в bash, если не, что на многих языках программирования использует

, ссылка
stackoverflow US

1
ответ дан 19.11.2019, 22:27
  • 1
    Несомненно я оставляю себе $ () и $ { }, спасибо! – arquitectura_deldesastre 07.03.2019, 13:05