다음 표현식을 사용하여 변수에 숫자를 쓰고 싶지만
val=$(ls -al $1 | awk -v a=$i '{if( NR == a ) print $5}')
모든 i에 대해 비슷한 표현식으로 0을 반환하므로 문제 없이 파일 이름을 씁니다.
답변1
현재 디렉터리의 다섯 번째 이름을 인쇄하려는 것 같습니다.
올바른 방법은
shopt -s dotglob
set -- *
printf '%s\n' "$5"
*
이는 확장된 파일 이름 와일드카드 패턴에 의해 생성된 목록 으로 위치 매개변수를 설정합니다 ( dotglob
셸 옵션도 설정했기 때문에 숨겨진 이름 포함). 다섯 번째 위치 매개변수는 $5
사전순으로 5번째 위치에 이름을 보관합니다. 디렉토리에 5개 미만의 이름이 포함되어 있으면 위의 명령은 빈 줄을 인쇄합니다.
이름에 공백, 탭 또는 줄 바꿈이 포함되어 있는지는 중요하지 않습니다.
변수에 이름을 지정하려면 다음을 사용하십시오.
val=$5
현재 디렉토리가 아닌 다른 디렉토리의 내용에서 이름을 선택하고 디렉토리라고 말한 $dir
다음 "$dir"/*
패턴으로 사용하시겠습니까?
이름이 아닌 파일 크기를 원하면 stat
다음을 사용하십시오.
stat -c %s "$5"
또는 변수에 할당하려면
val=$( stat -c %s "$5" )
위의 내용은 GNU를 가정 stat
하고 파일 크기를 바이트 단위로 제공합니다(존재한다고 가정).
위치 매개변수를 중단하는 대신 명명된 배열을 사용하려면 다음을 사용하세요.
names=( "$dir"/* )
"${names[4]}"
그런 다음 (배열은 쉘의 인덱스 0에서 시작)을 사용하여 다섯 번째 이름을 얻습니다 bash
.