explica o comando 'printf -' #! $ {opt_E} ''

1

Eu não consigo entender esse comando e ficar confuso: aqui estão as coisas que eu executei no linux tentando entender e seu funcionamento

[root@testgfs2 final_scripts]# printf -- "#!${opt_E}"
printf -- "#reset{opt_E}"
#reset{opt_E}[root@testgfs2 final_scripts]# printf -- "#!${opt_E}"
printf -- "#"#reset{opt_E}"{opt_E}"
##reset{opt_E}{opt_E}[root@testgfs2 final_scripts]# echo !$
echo "#"#reset{opt_E}"{opt_E}"
##reset{opt_E}{opt_E}

como isso funciona e eu não sei sob o tópico que vem, então eu não consigo encontrá-lo no google também.

também o que faz -- após printf

    
por munish 21.01.2013 / 10:44

2 respostas

3

Consulte o Manual de referência do bash :

!!:$

designates the last argument of the preceding command. This may be shortened to !$.

Se esse comportamento não for desejado, você pode simplesmente escapar! com barra invertida:

% echo "\!$"                  
!$
    
por 21.01.2013 / 11:17
2

Em um script, os caracteres #! não são especiais neste contexto. O fragmento printf -- "#!${opt_E}" chama o comando printf com dois argumentos: -- e #! concatenados com o valor da variável opt_E . O argumento -- informa a printf que, mesmo que haja argumentos subseqüentes começando com - , eles não devem ser interpretados como opções; isso não faz diferença aqui, pois #!${opt_E} não começa com - . As aspas duplas em torno de #!${opt_E} protect # são interpretadas como um caractere de início de comentário e protegem o valor de opt_E de ser dividido em palavras separadas que são interpretadas como padrões de caractere curinga.

Se o valor de opt_E não contiver nenhum caractere % ou \ , esse comando imprime #! seguido pelo valor de opt_E , sem nova linha final. Em geral, o comando interpreta o valor de opt_E como um formato printf.

Se você tentar isso em um shell interativo, poderá ver efeitos estranhos devido a ! ser interpretado como um caractere de expansão de histórico, que recupera automaticamente os comandos anteriores. Para evitar isso, adicione um \ antes de ! . ! também é interpretado literalmente entre aspas simples: printf -- '#!${opt_E}' .

Se você estiver repetindo um script, terá que definir opt_E para o valor correto primeiro. Se você estiver tentando depurar um script, adicione set -x na segunda linha (insira-o logo abaixo da linha #! inicial): o shell imprimirá um traço de cada linha à medida que for executado.

    
por 22.01.2013 / 00:39