6 poin oleh GN⁺ 2025-03-23 | 1 komentar | Bagikan ke WhatsApp
  • Banyak utilitas baris perintah mendukung opsi bentuk pendek (-f) dan opsi bentuk panjang (--force)
  • Bentuk pendek ditujukan untuk penggunaan interaktif; untuk skrip, disarankan menggunakan bentuk panjang
  • Misalnya, di terminal kita mengetik $ git switch -c my-new-branch.
  • Dalam skrip rilis, tuliskan seperti berikut:
    • try shell.exec("git fetch origin --quiet", .{});
    • try shell.exec("git switch --create release-{today} origin/main", .{ .today = stdx.DateUTC.now() }, );
  • Opsi bentuk panjang jauh lebih deskriptif bagi pembaca

1 komentar

 
GN⁺ 2025-03-23
Komentar Hacker News
  • Saya lebih menyukai opsi panjang, tetapi ketika harus memanggil perintah POSIX secara portabel, opsi pendek adalah satu-satunya pilihan. POSIX tidak mendefinisikan opsi panjang

    • Misalnya, Anda bisa merujuk pada spesifikasi diff
    • Dalam banyak kasus, menggunakan binding library adalah alternatif yang lebih baik daripada bergantung pada utilitas POSIX
    • Daripada memanggil grep, mungkin lebih efisien menggunakan sesuatu seperti libpcre
    • Pada utilitas non-POSIX seperti git, hg, rg, ag, masuk akal untuk menggunakan opsi panjang
  • Jangan mencampur interpolasi string dan eksekusi perintah

    • Terutama perlu berhati-hati ketika perintah diproses melalui shell
    • Dalam bahasa apa pun, argumen harus diteruskan langsung ke execv(2), execvp(2), dan sebagainya dengan menggunakan API eksekusi berbasis list atau array
  • Saya setuju bahwa sebaiknya menggunakan opsi panjang, tetapi portabilitas harus dipertimbangkan

    • Tidak semua distribusi BSD mendukung opsi panjang gaya GNU
    • Jika Anda menginginkan portabilitas, Anda harus menggunakan opsi pendek
  • Jangan lupa menggunakan -- setelah semua opsi, sebelum argumen dinamis

  • Sebelum memanggil perintah, Anda harus memeriksa apakah panjang perintah melebihi ARG_MAX

    • Misalnya, ketika ada perintah seperti berikut:
      • grep --ignore-case --files-with-matches -- "hello" *.c
    • Harus dipanggil seperti ini:
      • CMD="grep --ignore-case --files-with-matches -- \"hello\" *.c"
      • ARG_MAX=$(getconf ARG_MAX)
      • CMD_LEN=${#CMD}
      • if (( CMD_LEN > ARG_MAX )); then
      • echo "Error: Command length ($CMD_LEN) exceeds ARG_MAX ($ARG_MAX)." >&2
      • exit 1
      • fi
      • eval "$CMD" # Peringatan, mengevaluasi nama file
  • Saya setuju dengan cara ini. Keuntungan lainnya adalah jadi lebih mudah mencari di halaman man dengan grep untuk mengetahui fungsi suatu opsi

  • Jika Anda ingin membuat skrip portabel ke sistem POSIX lain, Anda mungkin perlu menggunakan opsi pendek

    • Opsi panjang tidak distandardisasi
    • Anda harus menentukan sendiri trade-off-nya
  • Opsi sebaiknya ditempatkan di baris terpisah agar mudah dilacak dan di-git blame

  • Ini adalah salah satu aturan dasar saat menulis skrip. Jika opsi panjang tersedia, sebaiknya digunakan

    • Itu terlalu masuk akal untuk tidak dilakukan
  • Opsi bentuk panjang jauh lebih deskriptif bagi pembaca

    • Lebih jarang terjadi typo