Правильный способ установки puttygen на Amazon Linux [дубликат]

${... }(las llaves )marcan varios tipos de expansión de parámetros , la más simple de las cuales es simplemente expandir el valor de una variable. Lo que está dentro de las llaves en su código no es un nombre de parámetro válido, ni ninguna otra expansión, por lo que el shell se queja.

Parece que desea la sustitución de comandos en su lugar, para eso, la sintaxis es$(... )(paréntesis regular ).

Además, lsen ls $filename | sed...parece un poco innecesario, la variable se expande a su nombre de archivo y lssimplemente lo pasa. Podría usar echo "$filename" | sed...en su lugar.

Dicho esto, podrías hacer esas modificaciones directamente en el shell:

no="${filename/assemblyDB.}"   # remove first match
no="${no/.las}"

o, utilizando los operadores estándar:

no="${filename#assemblyDB.}"   # remove from start of string
no="${no%.las}"                # remove from end of string

Si ejecuta sed, es posible que desee tener en cuenta que .coincide con cualquier carácter en las expresiones regulares, por lo que sería más correcto citarlo con una barra invertida. También puede dar una instancia sedde ambos comandos:sed -e 's/assemblyDB\.//' -e 's/\.las//'.

Y luego for filename in $(find. -type f -name "assemblyDB.*.las"); dotiene todos los problemas que tiene analizar ls , principalmente el hecho de que los espacios en blanco y los comodines en los nombres de archivo lo romperán. En ksh/Bash/zsh, podría hacer todo ese bucle en el shell:

shopt -s globstar         # in Bash
for filename in **/assemblyDB.*.las; do
   ...

50
10.07.2018, 10:08
0 ответов

Теги

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