아래와 같이 마지막 디렉토리를 인쇄하려고합니다.
#!/bin/bash
dirc="/a/b/"
i=3
`echo "$dirc" | awk -F / '{ print ""$"i"}'`
"b"가 인쇄되어야 하지만 그런 일은 발생하지 않습니다.
답변1
i
AWK 변수는 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 번째 필드에 액세스합니다.awk
var
$i
$var
awk
$ i=3
$ echo "$dirc" | awk -v var="$i" -F '/' '{ print $var }'
b
var
in 과 in $var
의 차이점은 숫자값(이 경우) 이지만 숫자값에 해당하는 필드의 값이라는 awk
점입니다 .var
$var
ilkkachu가 지적했듯이 코드 마지막 줄의 백틱은 의미가 없습니다. 명령의 결과(string b
)가 실행될 명령으로 해석됩니다.