argc và argv là gì?

Mặc dù nhiều hệ điều hành cung cấp giao diện trực quan, nơi mà người dùng có thể chạy các chương trình (phần mềm máy tính) chỉ bằng vài cú click chuột. Nhưng thực tế, tất cả chúng đều có thể được chạy với một câu lệnh đơn lẻ. Với những ai đã và đang trải nghiệm những hệ điều hành họ Unix/Linux thì điều này lại càng trở nên quen thuộc. Các bạn hãy xem câu lệnh dưới đây:

$ google-chrome --app=https://google.com --incognito # Mở ứng dụng google chrome với url là https://google.com và phiên nặc danh.

Câu lệnh phía trên gồm 2 phần:

  • google-chrome là tên chương trình.
  • –app=https://google.com, –incognito là 2 thông số kèm theo khi chạy chương trình.

Ở đây, [–app=https://google.com, –incognito] chính là argv của chương trình google-chrome. Vậy argc và argv là gì?

  • argv là viết tắt của từ Argument Vector – Danh sách các tham số.
  • argc là viết tắt của từ Argument Count – Số lượng tham số.

Như vậy, câu lệnh phía trên có argc = 2 và argv = [–app=https://google.com, –incognito]. Nếu các bạn còn nhớ hàm int main(int argc, char *argv[]) của một chương trình viết bằng C/C++ thì các bạn đã hiểu chúng dùng để làm gì.

Demo

OS: Ubuntu 18.04

Bước 1: Tôi tạo một file main.js.

#!/usr/bin/env node

/**
 * Câu lệnh "node main.js --name=QuynhNX" sẽ có dữ liệu như sau:
 *
 * argv = [
 *     '/home/xuanquynh/.nvm/versions/node/v12.13.0/bin/node',
 *     '/home/xuanquynh/Code/Demos/node-demo/main.js',
 *     '--name=QuynhNX',
 * ]
 *
 * argc = argv.length
 *
 * "node main.js" => "Welcome You to NodeJS World!"
 * "node main.js --name=QuynhNX" => "Welcome QuynhNX to NodeJS World!"
 */

let name = 'You'

for (let value of process.argv) {
    if (value.indexOf('--name=') === 0) {
        name = value.split('=').pop()
    }
}

console.log(`Welcome ${name} to NodeJS World!`)

Bước 2: Tôi chạy những lệnh sau lệnh sau.

$ node main.js # "Welcome You to NodeJS World!"
$ node main.js --name=QuynhNX # "Welcome QuynhNX to NodeJS World!"