質問を読むには、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

おすすめ記事