如果我写:
ls -i '/home/user/Desktop/file' | awk '{print $1}'
我得到指定文件的索引节点号。
我想制作一个脚本来返回某个文件的索引节点号。
如果我做:
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'
,shell/home/user/Desktop/file
在将其传递给 之前删除周围的引号ls
。ls
获取/home/user/Desktop/file
作为参数。
当您输入 时'/home/user/Desktop/file2'
,read file
这些引号将保留在变量中。然后,在 中ls "$file"
,bash 扩展变量,并删除不是变量扩展结果的引号(因此"..."
命令中最初存在 ,而不是'...'
变量内容中的 )。ls
gets'/home/user/Desktop/file2'
作为参数,当然,没有这样的文件。
您不需要在变量中另外添加引号。如果您想使用 更安全地输入文件名(包括空格和反斜杠等)read
,请使用相反:
IFS= read -r file
作为输入:
/home/user/Desktop/file2