예, exec
은 파일 설명자 번호에 대한 변수를 허용하지 않습니다. 의견에서 지적한 바와 같이, 당신은 $i
이 1
경우,
exec 9>"abc/$i"
에 해당,
eval "exec $((i + 8))>"'"abc/$i"'
는 그 복잡한 따옴표가 평가 에드을 확인하고 명령도 안전합니다 - 에드 간부 인 사용할 수 있습니다 파일 이름이 abc/1
과 다른 것으로 변경된 경우
그러나there is 경고 : 그들은 파일과 충돌 할 수 있으므로 파일을 사용하는 것이보다 9 디스크립터
리디렉션은주의해서 사용해야은 쉘이 내부적으로 사용 디스크립터.
당신의 작업은 연속적인 파일 기술자 번호를 필요로하지 않는 경우에 따라서, 당신은 자동으로 할당 사용할 수 있습니다 설명 : 파일 기술자 번호 앞에 할 수있다
각 리디렉션 대신 단어 앞에 할 수있다 형식은 {varname}
입니다. 이 경우 >&-
및 <&-
을 제외한 각 재 지정 연산자에 대해 쉘은 10보다 큰 파일 설명자를 할당하고 varname
에 할당합니다.
그래서,
exec {fd}>"abc/$i"
echo "$fd"
는 abc/1
및 인쇄 파일 기술자 번호 (예를 들어, 10
)에 기록 파일 기술자 10 (또는 그 이상)를 엽니 다.
또 다른 메모에서'$ [expression]'은 더 이상 사용되지 않는 구문입니다. '$ ((expression))'로 이동하십시오 – anishsane
''eval "exec $ ((i + 8))> abc/$ i"'시도해보십시오. – anishsane