我试图在每个循环中得到这个词。我不知道如何i
插入print $2
.
while [ $i -lt 4 ]
do
A=$(awk -F_ '{print $2}' <<< 'one_two_test_three')
echo $A
done
显然,这将输出:
two
two
two
two
我想要的是:
one
two
test
three
我试过了:
A=$(awk -F_ '{print $($i)}' <<< 'one_two_test_three')
没用。
正确的方法是通过( ) 选项将
bash/shell
变量awk
作为参数传递给脚本:-v
variable
输出:
不需要 shell 循环来解析数据:
该脚本将输入解析为
_
-delimited 列表并打印每个字段。更短:
这会将输出字段分隔符设置为换行符,然后在打印记录之前强制重新形成整个记录(插入新的分隔符)。
更短:
循环访问数据:
这样,您就不会多次调用用于解析数据的实用程序。
假设这些值没有换行符,则:您的代码进行了最少的更改以使其正常工作:shebang 必须是
#!/bin/bash
(ksh 或 zsh),因为您使用的是<<<
.但是,由于字符串来自 shell,因此可以简化为:
并使用值数组(可变数量的值):
如果需要使用更简单的外壳:
当然,如果不需要设置变量,也可以在脚本中设置 IFS 的值:
请注意,该变量未加引号使用,这可能不安全。