为何shell for循环列表不能成功解析xargs中的变量呢?
本文介绍了为何shell for循环列表不能成功解析xargs中的变量呢?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
配置表中有一个黑名单的标签列表 是这样保存的 如 1-3,7-9
想把它展开成 1,2,3,7,8,9
如下所示
for i in {1..3,7..9}; do for j in {$i}; do echo -n "$j,"; done; done
1,2,3,7,8,9
详细步骤如下
# 替换-为..
echo "1-3,7-9" | sed 's/-/../g'
1..3,7..9
# 确定能够正确识别@
echo "1-3,7-9" | sed 's/-/../g' | xargs -I@ echo @
1..3,7..9
# 将@变量放到for中 报错
echo "1-3,7-9" | sed 's/-/../g' | xargs -I@ for i in {@}; do for j in {$i}; do echo -n "$j,"; done; done
zsh: parse error near `do'
请问错在哪呢? 正确的写法是?
解决方案
先抛开 do
的问题,
你试试:
$ echo "1..3,7..9" | xargs -I @ echo [@]
[1..3,7..9]
然后试试:
$ echo "1..3,7..9" | xargs -d "," -I @ echo [@]
[1..3]
[7..9]
楼主你 xargs 没有把输入切开。
然后看:
$ echo "1..3,7..9" | xargs -d "," -I @ echo "for i in {@}; do; echo -n \"$i,\"; done"
for i in {1..3}; do; echo -n "$i,"; done
for i in {7..9}; do; echo -n "$i,"; done
$ echo "1..3,7..9" | xargs -d "," -I @ echo "for i in {@}; do; echo -n \"\$i,\"; done" | sh
1,2,3,7,8,9,
好像 mac 不支持 xargs
的 -d
参数,有点苦恼。
这篇关于为何shell for循环列表不能成功解析xargs中的变量呢?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文