질문을 읽으려면 ls -i를 사용하십시오.

질문을 읽으려면 ls -i를 사용하십시오.

내가 쓴다면 :

ls -i '/home/user/Desktop/file' | awk '{print $1}'

지정된 파일의 inode 번호를 얻습니다.

특정 파일의 inode 번호를 반환하는 스크립트를 만들고 싶습니다.

만약 내가한다면:

read file
'/home/user/Desktop/file2'

그런 다음:

ls -i "$file" | awk '{print $1}'

그것이 반환하는 것은 입니다 ls cannot find '/home/user/Desktop/file2'.

왜? 감사해요

답변1

에서 ls -i '/home/user/Desktop/file'셸은 /home/user/Desktop/file에 전달하기 전에 주변 따옴표를 제거합니다 ls. 매개변수로 ls가져옵니다 /home/user/Desktop/file.

이러한 따옴표는 입력하는 동안 변수에 남아 있습니다 '/home/user/Desktop/file2'. read file그런 다음 ls "$file"bash에서 변수를 확장하고 변수 확장의 결과가 아닌 따옴표를 제거합니다(따라서 원래 변수 내용이 "..."아닌 명령에 존재함 ). 물론 매개변수로 가져오지만 그러한 파일은 없습니다.'...'ls'/home/user/Desktop/file2'

변수에 추가 따옴표를 추가할 필요가 없습니다. 보다 안전하게 파일 이름(공백, 백슬래시 등 포함)을 입력하려면 read다음을 사용하세요.반대로:

IFS= read -r file

입력으로:

/home/user/Desktop/file2

관련 정보