Как объявить переменную внутри bash -c

Например, вы можете удалить все, кроме числа, следующего за цифрами и точками:

sed -e 's/.*[0-9.]*\.\([0-9]*\).*/\1/'

Пояснение:

.*         anything
[0-9.]*    digits and dots in any order
\.         dot
\(         start a matching group
  [0-9]*   digits
\)         end the matching group
.*         anything

Вся совпадающая строка заменяется соответствующей группой, т. Е. Последним числом после цифр и точек.

0
13.05.2018, 12:17
2 ответа

Porque $?y $ase evalúan en el shell de llamadas.

bash -c 'cat /tmp/lol ; a=$?; if (( $a == 0)); then echo "2"; fi;'
1
28.01.2020, 02:32

Veamos qué sucede realmente aquí:

$ set -x
$ bash -c "var=3; echo $var"
+ bash -c 'var=3; echo '

Con set -xobtienes un seguimiento de qué comandos se ejecutan realmente (usa set +xpara desactivar esto ). Aquí vemos que la variable $varse expande a una cadena vacía antes de que se ejecute el shell secundario bash -c.

Esto se debe a las comillas dobles del argumento de bash -c, lo que hará que el shell actual realice una expansión variable dentro de la cadena. Dado que la variable varno está definida o está vacía en el shell actual, su expansión es la cadena vacía.

Para proteger una cadena de la "interferencia" del shell, use comillas simples:

$ bash -c 'var=3; echo $var'
+ bash -c 'var=3; echo $var'
3

... o escapar de$(En mi opinión, no tan agradable):

$ bash -c "var=3; echo \$var"
+ bash -c 'var=3; echo $var'
3
1
28.01.2020, 02:32

Теги

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