Bash 多变量标准输出

Bash 多变量标准输出,bash,shell,variables,stdout,sh,Bash,Shell,Variables,Stdout,Sh,我有一个自定义程序,可以从shell运行,下载一个文件,还可以输出一些有关它下载的文件的信息 sh-3.1$ superdl -l username -p password filename Logging in... OK File: "filename" Size: "1100 bytes" Type: "text" Encryption: "RSA" Encoding: "utf-8" Done! 下面是在bash中

我有一个自定义程序,可以从shell运行,下载一个文件,还可以输出一些有关它下载的文件的信息

    sh-3.1$ superdl -l username -p password filename
    Logging in...
    OK
    File: "filename"
    Size: "1100 bytes"
    Type: "text"
    Encryption: "RSA"
    Encoding: "utf-8"
    Done!

下面是在bash中执行此操作的一个示例:

#!/bin/bash
while read -r var val
do
    [[ $var == Type: ]] && type="$val"
    [[ $var == Encryption: ]] && encryption="$val"
    [[ $var == Encoding: ]] && encoding="$val"
done < <(./superdl -l username -p password filename)

echo "$type $encryption $encoding"
或与案例陈述一起:

#!/bin/bash
while read -r var val
do
    case "$var" in
    Type: )
        type="$val" ;;
    Encryption: )
        encryption="$val" ;;
    Encoding: )
         encoding="$val" ;;
    esac
done < <(./superdl -l username -p password filename)

echo "$type $encryption $encoding"
#/bin/bash
而read-rvar-val
做
中的案例“$var”
类型:)
type=“$val”;;
加密:)
加密“$val”;;
编码:)
编码“$val”;;
以撒

完成<你可以
superdl | tee文件
,然后grep该文件。是的,我知道这一点。我想要更优雅的方式;)<是的,我知道。我想要更优雅的方式;)--您似乎说为我做。如果
superdl
是一个自定义程序,那么请执行以下操作:将当前输出写入标准错误,然后写入输出行,如
TYPE=text
。然后用
eval“$(superdl…”
计算程序的输出。如果我想在一个脚本中传递多个参数,该怎么办?比如:superdl“$@”user2791506你可以这样做。有什么问题吗?@user2791506在这种情况下没有任何变化。只需将while循环放在for循环中。我的意思是,还有比这更优雅的方法吗:<@user2791506现在想不出更优雅的方法了。但是像这样使用过程替换对我来说似乎很自然
#!/bin/bash
while read -r var val
do
    case "$var" in
    Type: )
        type="$val" ;;
    Encryption: )
        encryption="$val" ;;
    Encoding: )
         encoding="$val" ;;
    esac
done < <(./superdl -l username -p password filename)

echo "$type $encryption $encoding"
#!/bin/bash
for filename in "$@"
do

    while read -r var val
    do
        [[ $var == Type: ]] && type="$val"
        [[ $var == Encryption: ]] && encryption="$val"
        [[ $var == Encoding: ]] && encoding="$val"
    done < <(./superdl -l username -p password "$filename")

    echo "$type $encryption $encoding"
done