我在这个任务上有些挣扎,例如,我可以做一个简单的循环以使用for循环将变量值发送到文件中。但是如何在输出可变值之前得到一些东西呢?我做了这样的事情作为一种解决方法:
list="$1\n$2\n$3"
varNames=$'var1=\nvar2=\nvar3='
for i in $varNames $list; do
echo -e $varNames$list > "vars-$(date +%Y-%m-%d_%H.%M).file"
done
但是我无法获得正确的循环来遍历两个列表中的每个项目,但是我得到的输出是:
var1= var2= var3=$1
$2
$3
在$ 1,$ 2,$ 3以上是我之前创建的变量的正确值。我在此循环中缺少什么?创建两个列表的好方法还是以后可以由某些sed处理?
谢谢!
脚本中的行几乎有很多问题,我假设每个步骤都按预期工作,所以我尝试一步一步地进行操作。
1。
list="$1\n$2\n$3"
这将行不通,因为\n
不会用换行符代替,您将需要以下内容:
list="$1"$'\n'"$2"$'\n'"$3"
或者
list="$1
$2
$3"
2。
for i in $varNames $list; do
假设您已修复(1),则此循环将运行6次(免责声明,请参见此最后一句)。每个和$varNames
和一次$list
,我认为这不是故意的。另外,当您像这样循环时,变量不会被换行符分割,而是被分割$IFS
。它默认为换行符,空格或制表符。这样就可以了,但是知道了,您也可以list="$1 $2 $3"
在(1)中使用。如果您知道这些变量中的每一个都不包含换行符,空格或制表符,那么这当然是可行的。
3。
echo -e $varNames$list
输出整个变量,而不仅仅是输出的拆分部分$i
。
4,
您会为每次迭代覆盖整个文件。更好地使用
for ...; do ... done > file
所以现在怎么办?
我认为您无法轻松地按原样修复您的代码。相反,您应该使用bash数组并遍历键:
#!/bin/bash
list=("$1" "$2" "$3")
varNames=("var1" "var2" "var3")
for k in "${!varNames[@]}"; do
printf '%s=%s\n' "${varNames[$k]}" "${list[$k]}"
done > "vars-$(date +%Y-%m-%d_%H.%M).file"
我更喜欢使用printf
(请参阅此),但是echo
如果您不在乎,也可以使用类似的方式...
echo "${varNames[$k]}=${list[$k]}"
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句