gpt4 book ai didi

linux - shell Bash 脚本

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:22:33 25 4
gpt4 key购买 nike

我正在制作一个 bash 脚本。我必须得到 3 个变量

VAR1=$(cat /path to my file/ | grep "string1" | awk '{ print $2 }'
VAR2=$(cat /path to my file/ | grep "string2" | awk '{ print $2 }'
VAR3=$(cat /path to my file/ | grep "string3" | awk '{ print $4 }'

我的问题是如果我写

echo $VAR1
echo $VAR2
echo $VAR3

我可以正确地看到值

但是当我尝试像这样将它们写在一行中时

echo "VAR1: $VAR1 VAR2: $VAR2 VAR3: $VAR3"

来自 $VAR3 的值写入输出覆盖 $VAR1$VAR2 的值的开头

我希望我的解释很清楚。如有疑问请告诉我

感谢和问候。

朗贝尔

最佳答案

在我看来$VAR3包含 \r在某些 shell 中,这会将光标移动到行的开头。使用 printf相反:

printf "VAR1: %s VAR2: %s VAR3: %s\n" "$VAR1" "$VAR2" "$VAR3"

另请注意,您提取值的方式非常低效,可以减少一次对 awk 的调用:

read -r var1 var2 var3 _ < <(awk '/string1/ { a=$2 }
/string2/ { b=$2 }
/string3/ { c=$4 }
END { print(a, b, c) }' /path/to/file)
printf "VAR1: %s VAR2: %s VAR3: %s\n" "$var1" "$var2" "$var3"

吹毛求疵的是大写的变量名是为环境变量保留的,所以我全部改成了小写。

<(...)是一个进程替换,将使...写入"file"并返回文件名:

$ echo <(ls)
/dev/fd/63

command < file是重定向更改标准输入 command来自文件 file .

关于linux - shell Bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38098884/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com