echo $ 및 변수

echo $ 및 변수

아래와 같이 마지막 디렉토리를 인쇄하려고합니다.

#!/bin/bash
dirc="/a/b/"
i=3  
`echo "$dirc" | awk -F / '{ print ""$"i"}'`

"b"가 인쇄되어야 하지만 그런 일은 발생하지 않습니다.

답변1

iAWK 변수는 AWK 스크립트의 AWK 변수이며 AWK 변수를 설정해야 합니다.

#!/bin/bash
dirc="/a/b/"
echo "${dirc}" | awk -F / -v i=3 '{print $i}'

i쉘이 이해하는 방식으로 값을 지정할 수 있습니다.

i=3
echo "${dirc}" | awk -F / -v "i=${i}" '{print $i}'

할 수 있다AWK 스크립트에서 쉘이 변수를 평가하도록 하는 것도 가능하지만 이는 문제를 야기할 뿐입니다.

i=3
echo "${dirc}" | awk -F / "{print \$${i}}"

답변2

쉘을 사용할 수 있습니다문자열 연산외부 유틸리티를 호출하지 않고 디렉토리의 마지막 부분을 가져옵니다.

dirc="/a/b/"
dirc=${dirc%/}         # remove trailing / if it is there
echo "${dirc##*/}"     # remove everything up to the last /

출력 이 이면 작동하지 않으므로 b더 나을 수 있습니다 .dirc/basename

또는 숫자로 필드 가져오기쉘 배열.

IFS=/ read -a dira <<< "$dirc"   # split to an array
echo "${dira[2]}"                # echo one field, first is 0

그런데, echo | awk확실히 명령의 백틱이 오타인가요? 이를 사용하여 쉘은 awk의 출력을 실행할 명령으로 처리합니다.

답변3

경로의 마지막 부분을 인쇄하려면 다음을 사용하십시오 basename.

$ dirc='/a/b/'
$ basename "$dirc"
b

/를 사용하여 i번째로 구분된 필드를 얻으려면 예 를 들어 변수를 값으로 설정한 awk다음 in을 사용하여 i 번째 필드에 액세스합니다.awkvar$i$varawk

$ i=3
$ echo "$dirc" | awk -v var="$i" -F '/' '{ print $var }'
b

varin 과 in $var의 차이점은 숫자값(이 경우) 이지만 숫자값에 해당하는 필드의 값이라는 awk점입니다 .var$var


ilkkachu가 지적했듯이 코드 마지막 줄의 백틱은 의미가 없습니다. 명령의 결과(string b)가 실행될 명령으로 해석됩니다.

관련 정보