From c78f1587c98e320f12bd07f2c3ce8bd25bfd3a73 Mon Sep 17 00:00:00 2001 From: wangkun300 <154576807+wangkun300@users.noreply.github.com> Date: Wed, 15 May 2024 00:51:18 +0800 Subject: [PATCH] Updated SC2006 (markdown) --- SC2006.md | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/SC2006.md b/SC2006.md index 56a6051..4645259 100644 --- a/SC2006.md +++ b/SC2006.md @@ -1 +1,22 @@ -1 \ No newline at end of file +# Use `$(...)` notation instead of legacy backticked `` `...` ``. +### Problematic code +```sh +echo "You are running on `uname`" +``` +### Correct code +```sh +echo "You are running on $(uname)" +``` +### Rationale +Backtick command substitution `` `...` `` is legacy syntax with several issues. +1. It has a series of undefined behaviors related to quoting in POSIX. +1. It imposes a custom escaping mode with surprising results. +1. It's exceptionally hard to nest. +`$(...)` command substitution has none of these problems, and is therefore strongly encouraged. +### Exceptions +None. +### Related resources: + +* [BashFaq: Why is `$(...)` preferred over `` `...` `` (backticks)?](http://mywiki.wooledge.org/BashFAQ/082) +* [StackOverflow: What is the difference between $(command) and `` `command` `` in shell programming?](https://stackoverflow.com/questions/4708549/shell-programming-whats-the-difference-between-command-and-command) +* [shfmt](https://github.com/mvdan/sh) will automatically convert the legacy syntax \ No newline at end of file