伙计我怎样才能完成这项工作
`find / xyz / abc / music / | grep def`
我不想将数组存储在任何临时变量中。我们怎样才能直接对这个阵列进行操作。
所以要获得该数组的第一个元素
echo $ {$(`find / xyz / abc / music / | grep def`)[0]} 请帮帮我如何实现这个目标
答案 0 :(得分:20)
将调用放入数组括号中
X=( $(find /xyz/abc/music/ | grep def) )
echo ${X[1]}
echo ${X[2]}
echo ${X[3]}
echo ${X[4]}
答案 1 :(得分:10)
如果您只需要第一个元素(或更确切地说是行),则可以使用head
:
`find /xyz/abc/music/ |grep def | head -n 1`
如果需要访问任意元素,可以先存储数组,然后检索元素:
arr=(`find /xyz/abc/music/ |grep def`)
echo ${arr[n]}
但这不会将每行grep输出放入数组的单独元素中。
如果您需要整行而不是单词,则可以使用head
和tail
执行此任务,如下所示:
`find /xyz/abc/music/ |grep def | head -n line_number | tail -n 1`
答案 2 :(得分:5)
即使有点晚,最好的解决方案应该是Ray的答案,但是您必须将默认的字段分隔符环境变量IFS覆盖到换行符,以将完整的行作为数组字段。填充阵列后,应将IFS切换回原始值。我将扩展Rays解决方案:
# keep original IFS Setting
IFS_BAK=${IFS}
# note the line break between the two quotes, do not add any whitespace,
# just press enter and close the quotes (escape sequence "\n" for newline won't do)
IFS="
"
X=( $(find /xyz/abc/music/ | grep def) )
echo ${X[1]}
echo ${X[2]}
echo ${X[3]}
echo ${X[4]}
# set IFS back to normal..
IFS=${IFS_BAK}
希望这有帮助
答案 3 :(得分:1)
这将起作用
array_name=(`find directorypath | grep "string" | awk -F "\n" '{print $1}'`)
echo $array_name
答案 4 :(得分:0)
您的意思是获得输出的第一行吗?
find /xyz/abc/music/ |grep def|head 1