내가 쓴다면 :
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