在bash脚本中基于另一个变量名创建对变量的引用?

TMC

假设我在bash脚本中有这些变量:

path_family="/home/family"
path_family_log="/var/log/family.log"
path_friends="/home/friends"
path_friends_log="/var/log/friends.log"
path_pets="/home/pets"
path_pets_log="/var/log/pets.log"

我想创建一个for循环,在其中可以执行以下操作:

for TYPE in family friends pets
do
  for FILE in $path_<TYPE>
  do
    cat $FILE >> $path_<TYPE>_log
  done
done

显然,这不是正确的代码,只是表达我想要的最直接的方法。我想弄清楚如何对变量名进行子字符串替换并使它按预期工作。

斯蒂芬·查泽拉斯(Stephane Chazelas)

我建议改用关联数组:

#! /bin/bash -
typeset -A dir log # declare both variables as associative arrays
dir=(
   [family]=/home/family
  [friends]=/home/friends
     [pets]=/home/pets
)
log=(
   [family]=/var/log/family.log
  [friends]=/var/log/friends.log
     [pets]=/var/log/pets.log
)
for type in "${!dir[@]}"
do
  cat -- "${dir[$type]}/somefile" >> "${log[$type]}"
done

"${!array[@]}"是ksh语法,用于检索数组的键列表(无特定顺序))。

或更清楚的是在zsh中(bash在bash之前已有关联数组):

#! /bin/zsh -
typeset -A dir log
dir=(
  family  /home/family
  friends /home/friends
  pets    /home/pets
)
log=(
  family  /var/log/family.log
  friends /var/log/friends.log
  pets    /var/log/pets.log
)
for type in ${(k)dir}
do
  cat -- $dir[$type]/somefile >> $log[$type]
done

通过ksh93(bash借用了它的关联数组语法),您还可以使用复合变量的关联数组:

#! /bin/ksh93 -
conf=(
   [family]=(dir=/home/family;  log=/var/log/family.log)
  [friends]=(dir=/home/friends; log=/var/log/friends.log)
     [pets]=(dir=/home/pets;    log=/var/log/pets.log)
)
for type in "${!conf[@]}"
do
  cat -- "${conf[$type].dir}/somefile" >> "${conf[$type].log}"
done

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

bash:创建一个包含另一个变量的变量名

使用另一个变量的内容创建变量名

在另一个脚本中使用变量名访问数组?

使用变量名来更改另一个变量名的名称

在另一个脚本中更改变量名称时打印错误

如何通过引用变量从另一个脚本文件创建脚本文件?

在bash中从另一个变量创建一个变量

将基于共享根的相似变量名称粘贴到另一个变量中

bash将变量引用保留在另一个变量中

如何在Javascript中将变量值放在另一个变量名中

如何将变量值批量放入另一个变量名中?

jQuery动态将变量添加到另一个变量名

将for循环的变量插入另一个变量名

能够在另一个变量名中使用变量?红宝石

如何基于另一个变量在熊猫数据框中创建一个变量

从XSLT中的另一个变量动态传递变量名称

在一个脚本中创建变量并在另一个脚本中使用。jQuery/HTML/JS

将变量从一个Shell脚本导出到bash中的另一个脚本

Bash脚本-使用转义的变量将命令传递到另一个命令中

在另一个输入变量中引用一个输入变量

Python-Scrapy:通过另一个函数产生一个定义在一个函数中的变量名

如何在dplyr中至少基于一个条件(is.na)创建另一个变量?

根据另一个变量在Google脚本中设置一个变量

Bash命令变量在另一个命令中

基于另一个变量的变量摘要统计

如何创建基于另一个变量的值递增1的变量?

ggplot2 基于另一个变量而不是填充变量创建图例

ggplot2 基于另一个变量而不是填充变量创建图例

用另一个变量的值替换变量名的一部分?