Às vezes, é necessário emular e verificar as variáveis acima em pequenos exemplos e, em seguida, pode ser copiado imediatamente para algum script, etc.
Tentei resolver usando um exemplo simples das seguintes maneiras:
(find $1) /tmp
sh -c '(find $1) /tmp'
sh -c "find $1" /tmp
echo '(find $1) /tmp' | sh
e com outras combinações. Também experimentei adicionando a diretiva de intérprete shebang #!/bin/sh -x
, mas não obteve o resultado desejado.
Posso fazer isso simplesmente?
(find $1) /tmp
é um erro de sintaxe. Na verdade,(any-command) more-arguments
é um erro de sintaxe. Você pode explicar de maneira diferente o que está tentando fazer?rc
família (rc
,es
,akanga
...), onde, nesse caso, que é equivalente afind $1 /tmp
.Respostas:
O primeiro argumento depois
sh -c inline-script
vai para$0
(que também é usado para mensagens de erro) e o restante entra$1
,$2
...Então você quer:
(antigamente, era possível encontrar
sh
implementações em que o primeiro argumento foi feito$1
, então você faria:Ou:
para explicar os dois comportamentos, mas essas conchas se foram agora que o POSIX é predominante e está disponível publicamente).
Se você deseja definir
$1
,$2
em um escopo local no shell atual, é onde você usaria funções. Em conchas tipo Bourne:Alguns shells suportam funções anônimas. Esse é o caso de
zsh
:Ou
es
:Para alterar os parâmetros posicionais atuais, permanentemente, a sintaxe depende do shell. dchirikov já cobriu o Bourne-como conchas (Bourne, Korn,
bash
,zsh
, POSIX,ash
,yash
...).A sintaxe é:
No entanto, você precisa de:
Para esvaziar essa lista (ou
shift "$#"
) epara definir
$1
algo que comece com-
ou+
, por isso é um bom hábito sempre usarset --
especialmente ao usar dados arbitrários, comoset -- "$@" other-arg
adicionar argumentos ao final da lista de parâmetros posicionais.Nas conchas da
csh
família (csh
,tcsh
), você atribui àargv
matriz:Em conchas da
rc
família (rc
,es
,akanga
), para a*
matriz:Embora você também possa atribuir elementos individualmente:
Em
fish
, os parâmetros de posição são naargv
matriz única (não$1
,$@
lá):Em
zsh
, para compatibilidade comcsh
, você também pode atribuir àargv
matriz:E você também pode fazer:
Isso significa que você também pode fazer coisas como:
para adicionar um argumento ao final e:
para remover um argumento do final ou do meio, o que você não pode fazer facilmente com outras conchas.
fonte
é o que você precisa:
fonte