我有两个字符串,我想与空间分裂和两个两个地使用它们:如何在shell中拆分字符串?
namespaces="Calc Fs"
files="calc.hpp fs.hpp"
例如,我想用这样的:command -q namespace[i] -l files[j]
我在小白Bourne Shell。
我有两个字符串,我想与空间分裂和两个两个地使用它们:如何在shell中拆分字符串?
namespaces="Calc Fs"
files="calc.hpp fs.hpp"
例如,我想用这样的:command -q namespace[i] -l files[j]
我在小白Bourne Shell。
echo "hello world" | awk '{split($0, array, " ")} END{print array[2]}'
是你如何分割一个简单的字符串。如果你想要做的是循环遍历分裂的两个字符串的组合,那么你想是这样的
:
for namespace in $namespaces
do
for file in $files
do
command -q $namespace -l $file
done
done
编辑: 或扩大被张贴,你可以在AWK解决方案也只是做:
echo $foo | awk '{print $'$i'}'
编辑2:
免责声明:我不不自称是一个你是awk的专家,所以在这个解释中可能会有一些小错误。
基本上上面的代码片段是将$foo
的内容输入到awk的标准输入中。 Awk从行标准中逐行读取,根据字段分隔符将每行分隔为字段,缺省情况下是任意数量的空格。 Awk执行它作为参数给出的程序。在这种情况下,shell将'{ print $'$1' }'
扩展为{ print $1 }
,它只是告诉awk打印其输入的每一行的字段编号1。
如果您想要了解更多信息,我认为this blog post在描述基础知识(以及sed和grep的基础知识)方面做得非常好,如果您在开始时跳过理论性较强的东西(除非您到那种东西)。
你能告诉我关于** awk **的更多信息吗? – softghost 2012-02-18 23:48:20
我不是awk专家,但我在我的回答中添加了一个解释 – 2012-02-19 00:08:17
将它放到一个数组,像这样:
#!/bin/bash
namespaces="Calc Fs"
files="calc.hpp fs.hpp"
i=1
j=0
name_arr=($namespaces)
file_arr=($files)
command -q "${name_arr[i]}" -l "${file_arr[j]}"
我想找到一个办法做到这一点不阵列,这就是:
paste -d " " <(tr " " "\n" <<< $namespaces) <(tr " " "\n" <<< $files) |
while read namespace file; do
command -q $namespace -l $file
done
两个特殊用途的位置:进程替换( <(...)
)和这里字符串(<<<
)。这里字符串是echo $namespaces | tr " " "\n"
的快捷方式。流程替换是fifo创建的捷径,它允许使用命令的输出而不是文件运行paste
。
如果您正在使用的zsh 这可以很容易的:
files="calc.hpp fs.hpp"
# all elements
print -l ${(s/ /)files}
# just the first one
echo ${${(s/ /)files}[1]} # just the first one
在Python,这将是['zip'](http://docs.python.org/library/functions.html #zip)功能。 [bash中的Python zip()行为?](http://stackoverflow.com/questions/6145540/python-zip-behavior-in-bash)可能会有所帮助。 – 2012-02-18 22:22:48