从 Bash 中的变量列表中获取字符串

约尔亨贝托

我有一个file.env与此类似的文件 ( ):

kw_var1='string1'
kw_var2='string 2'
kw_var3='this is string 3'
kw_var4='does not matter'
kw_var5='maybe'

w_var1=qwert_1
w_var2=qwert_2
w_var3=qwert_3
w_var4=qwert_4

我需要创建一个字符串list_of_values,其中包含以 开头的所有变量的值kw_,即

$ echo -e $list_of_values

应该输出:

'string1' 'string 2' 'this is string 3' 'does not matter' 'maybe' 

我试图迭代它们,但无法使其正常工作。我的代码:

list_of_values=$(for param in $(cat $file.env | grep "kw\_"); do echo $(echo -e '$'$param | cut -s -d '=' -f1); done)

但这就是我得到的:

 $kw_var1 $kw_var2 $kw_var3 $kw_var4 $kw_var5

注意:

  • 变量值将包含空格;
  • list_of_values 将用作另一个函数的参数

任何有什么问题的想法?

更新:

在做最后的回声时,我使用了:

$ echo -e $list_of_values | tr '\n' ' '

将所有内容放在一行中。

埃德·莫顿
$ cat tst.awk
/^kw_/ {
    sub(/[^=]+=/,"")
    str = str sep $0
    sep = " "
}
END {
    print str
}

例如,请注意它this=that正确处理您想要的输出字符串:

$ cat file
kw_var1='string1'
kw_var2='string 2'
kw_var3='this is string 3'
kw_var4='does not matter'
kw_var5='maybe'
kw_var6='this=that'

w_var1=qwert_1
w_var2=qwert_2
w_var3=qwert_3
w_var4=qwert_4

$ awk -f tst.awk file
'string1' 'string 2' 'this is string 3' 'does not matter' 'maybe' 'this=that'

更新:鉴于您现在在评论中告诉我们的内容,假设您有时需要通过标签访问单个值,我会这样做,否则您可以使用常规数组而不是关联数组:

$ cat tst.sh
#!/bin/env bash

declare -A kw
declare -A w
while IFS= read -r line; do
    tag="${line%%=*}"
    val="${line#*=}"
    case "$tag" in
        kw* ) kw["$tag"]="$val" ;;
        w*  ) w["$tag"]="$val" ;;
        ?*  ) printf 'Error: unexpected contents: "%s"\n' "$line"; exit  1;;
    esac
done < file.env

printf '\nAll kw indices => values:\n'
for idx in "${!kw[@]}"; do
    printf '\t%s => %s\n' "$idx" "${kw[$idx]}"
done

printf '\nAll kw values passed to a function (printf) at once:\n'
printf '\t%s\n' "${kw[@]}"

printf '\nAll w indices => values:\n'
for idx in "${!w[@]}"; do
    printf '\t%s => %s\n' "$idx" "${w[$idx]}"
done

printf '\nAll w values passed to a function (printf) at once:\n'
printf '\t%s\n' "${w[@]}"

.

$ ./tst.sh

All kw indices => values:
        kw_var4 => does not matter
        kw_var5 => maybe
        kw_var6 => this=that
        kw_var1 => string1
        kw_var2 => string 2
        kw_var3 => this is string 3

All kw values passed to a function (printf) at once:
        does not matter
        maybe
        this=that
        string1
        string 2
        this is string 3

All w indices => values:
        w_var3 => qwert_3
        w_var2 => qwert_2
        w_var1 => qwert_1
        w_var4 => qwert_4

All w values passed to a function (printf) at once:
        qwert_3
        qwert_2
        qwert_1
        qwert_4

上面是在这个 file.env 上运行的,值周围没有多余的单引号,否则你只需在脚本中删除它们:

$ cat file.env
kw_var1=string1
kw_var2=string 2
kw_var3=this is string 3
kw_var4=does not matter
kw_var5=maybe
kw_var6=this=that

w_var1=qwert_1
w_var2=qwert_2
w_var3=qwert_3
w_var4=qwert_4

WRT我们在评论中讨论和使用printf '<%s>\n'代替fitsort我不知道,不具备:

$ list[0]='foo bar'; list[1]='etc'

$ printf '<%s>\n' "${list[@]}"
<foo bar>
<etc>

$ printf '<%s>\n' $(printf '%s\n' "${list[@]}")
<foo>
<bar>
<etc>

$ printf '<%s>\n' "$(printf '%s\n' "${list[@]}")"
<foo bar
etc>

看看第一个版本如何正确地简单地将 的内容传递list[]给 fitsort-replacement 命令,而其他版本则将 printf 输出的字符串传递给它?

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从 bash 中变量的 curl 响应中获取字符串?

来自分类Dev

如何从bash中的文件中获取字符串?

来自分类Dev

从bash中的文件行获取字符串

来自分类Dev

Bash:如何获取字符串中匹配项的完整子字符串?

来自分类Dev

从bash脚本变量解析json以获取字符串

来自分类Dev

从文件中提取字符串并使用Bash中的脚本分配给变量

来自分类Dev

使用bash和正则表达式获取字符串中的数字

来自分类Dev

如何使用bash获取字符串中函数的内容?

来自分类Dev

根据bash脚本中的模式提取字符串

来自分类Dev

如何在bash中读取字符串数组

来自分类Dev

我想取消设置其变量字符串存储在数组中的bash变量的列表

来自分类Dev

从 Bash 中的字符串中提取字符串

来自分类Dev

将引号插入bash中的字符串变量中

来自分类Dev

在bash中的变量中查找字符串

来自分类Dev

如何从bash中的变量获取唯一字符串

来自分类Dev

在bash中获取所有变量并转换为url查询字符串

来自分类Dev

在bash中从字符串中获取值

来自分类Dev

从bash变量中删除子字符串

来自分类Dev

JSON字符串中的Bash变量替换

来自分类Dev

比较bash变量中的多行字符串

来自分类Dev

JSON字符串中的Bash变量替换

来自分类Dev

在bash脚本中编辑字符串变量

来自分类Dev

调用sed替换存储在bash变量中的字符串

来自分类Dev

在bash中迭代字符串变量的行

来自分类Dev

比较bash变量中的多行字符串

来自分类Dev

用bash脚本中的变量替换字符串

来自分类Dev

bash使用sed从变量中添加字符串

来自分类Dev

如何在 Bash 脚本中连接字符串变量

来自分类Dev

bash中变量中字符串和字符串之间的区别

Related 相关文章

热门标签

归档