私が書いた場合:
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