私は本当にbashの初心者ですが、それは学校の科目の1つです。演習の1つは次のとおりです。
自分のログインに関する情報がある「/ etc/passwd」ファイルの行番号を指定します。
USERNAME
が自分のログインIDであるとすると、次のように完全に実行できました。
cat /etc/passwd -n | grep USERNAME | cut -f1
これは単に必要な行番号を与えただけです(より最適化された方法があるかもしれません)。しかし、whoami
の出力を使用してgrepパターンを表すようにコマンドをより一般的にする方法があるかどうか疑問に思いましたスクリプトなしまたは変数を使用せずに。つまり、次のように、読みやすい1行のコマンドを保持します。
cat /etc/passwd -n | grep (whoami) | cut -f1
これが本当にnoobの質問である場合はごめんなさい。
cat /etc/passwd -n | grep `whoami` | cut -f1
コマンドを `マークで囲むと、コマンドが実行され、ラップされたコマンドに出力が送信されます。
これは、単一のawk
呼び出しで実行できます。
awk -v me=$(whoami) -F: '$1==me{print NR}' /etc/passwd
さらに詳細に:
-v
は、awk
というme
変数を作成し、ユーザー名を入力します。-F
は、パスワードファイルに合わせてフィールドセパレータを:
に設定します。$1==me
は、最初のフィールドがユーザー名と一致する行のみを選択します。print
はレコード番号(行)を出力します。bash
のmanページでコマンドの置換を確認してください。
ティックを_``
_または$()
に戻すことができますが、個人的には後者を好みます。
だからあなたの質問のために:
_grep -n -e $(whoami) /etc/passwd | cut -f1 -d :
_
は、whoami
の出力をgrep
コマンドの_-e
_フラグの引数として置き換え、コマンド全体の出力は、_/etc/passwd
_の行番号になります。実行中のユーザー。