Bash 多变量标准输出
我有一个自定义程序,可以从shell运行,下载一个文件,还可以输出一些有关它下载的文件的信息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中
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