ProgramingTip

명령의 배열에 할당 할당입니까?

bestdevel 2020. 11. 27. 21:07
반응형

명령의 배열에 할당 할당입니까?


a의 결과를 grep배열 에 할당해야합니다 ... 예를 들어

grep -n "search term" file.txt | sed 's/:.*//'

이로 인해 검색어가 발견 된 줄 번호가있는 줄이 여러 개 생성됩니다.

1
3
12
19

Bash 배열에 할당하는 가장 쉬운 방법은 무엇입니까? 변수에 할당하면 공백으로 구분됩니다.


명령의 출력을 배열에 할당해야합니다. 일반 명령의 경우 다음과 가변 command합니다.

arr=( $(command) )

OP의 예에서 이것은 다음과 가변적입니다.

arr=($(grep -n "search term" file.txt | sed 's/:.*//'))

내부 $()는 명령을 실행하고 외부 ()는 출력을 배열로 만듭니다. 문제는 명령의 출력에 공백이 있기 때문에 작동하지 않습니다. 이를 처리하기 위해 접근 할 IFS\n있습니다.

IFS=$'\n'
arr=($(grep -n "search term" file.txt | sed 's/:.*//'))
unset IFS

배열의 각 요소에 대해 확장을 수행하여 가동 수도 있습니다.

arr=($(grep -n "search term" file.txt))
arr=("${arr[@]%%:*}")

공백으로 구분 된 언어는 bash에서 쉽게 순회 할 수 있습니다.

# save the ouput
output=$(grep -n "search term" file.txt | sed 's/:.*//')

# iterating by for.
for x in $output; do echo $x; done;

# awk
echo $output | awk '{for(i=1;i<=NF;i++) print $i;}'

# convert to an array
ar=($output)
echo ${ar[3]} # echos 4th element

파일 이름에 공간을 생각하고 권한 부여 find . -printf "\"%p\"\n"

참고 URL : https://stackoverflow.com/questions/9449417/how-do-i-assign-the-output-of-a-command-into-an-array

반응형