Linux shell set command All In One

发布时间 2023-03-24 18:14:15作者: xgqfrms

Linux shell set command All In One

https://FreeBSD.org

erros ❌

unbound-variable

# $1: unbound variable
if (($1))
then
  echo $1
  # arg=$1
  # tsGenerator $arg
  # tsGenerator $1
  # tsGenerator
else
  echo "❌"
fi

#!/usr/bin/env bash

# 显示所有的已经执行的命令
# set -eux
# set -ex

# bug
set -u

echo "\$1 = $1"

echo "\$2 = $2"

# 一个参数
# $ /auto-ts-files-generator.sh 33

# 两个参数
# $ ./auto-ts-files-generator.sh 33 regular-expressions

It is well appreciated that when set -u is active Bash will report an error if an unbound variable is referenced, e.g.:

很好理解,当 set -u 处于活动状态时,如果引用未绑定变量,Bash 将报告错误,例如:

https://bnikolic.co.uk/blog/bash-unbound-variable

https://replit.com/@bnwebcode/bash-unbound-variable

https://unix.stackexchange.com/questions/463034/bash-throws-error-line-8-1-unbound-variable

: bad substitution

# : bad substitution ❌
if [ -n "${$2:-}" ]; then
  echo "\$2 = $2"
  filename=$2
else
  filename=$fallback
fi

solutions

set +u

-u Treats unset parameters as an error when substituting.
Using + rather than - causes these flags to be turned off.

https://blog.csdn.net/qq_21481459/article/details/104202174

demos

#!/usr/bin/env bash

# 显示所有的已经执行的命令
set -eux

# bug ❌ https://www.cnblogs.com/xgqfrms/p/17251644.html#5161214
# 当 set -u 处于活动状态时,如果引用了未绑定的变量,Bash 将报告错误
# set -u

echo "? auto create templates in current folder..."

fallback="regular-expressions"

# filename=""
filename="regular-expressions"

# if (($2 != ''))
# $2: unbound variable ❌
if (($2))
then
  filename=$2
else
  filename=$fallback
fi

# : bad substitution ❌
# if [ -n "${$2:-}" ]; then
#   echo "\$2 = $2"
#   filename=$2
# else
#   filename=$fallback
# fi

man set

$ man set

BUILTIN(1)                     General Commands Manual                    BUILTIN(1)

NAME
     builtin, !, %, ., :, @, [, {, }, alias, alloc, bg, bind, bindkey, break,
     breaksw, builtins, case, cd, chdir, command, complete, continue, default, dirs,
     do, done, echo, echotc, elif, else, end, endif, endsw, esac, eval, exec, exit,
     export, false, fc, fg, filetest, fi, for, foreach, getopts, glob, goto, hash,
     hashstat, history, hup, if, jobid, jobs, kill, limit, local, log, login,
     logout, ls-F, nice, nohup, notify, onintr, popd, printenv, printf, pushd, pwd,
     read, readonly, rehash, repeat, return, sched, set, setenv, settc, setty,
     setvar, shift, source, stop, suspend, switch, telltc, test, then, time, times,
     trap, true, type, ulimit, umask, unalias, uncomplete, unhash, unlimit, unset,
     unsetenv, until, wait, where, which, while – shell built-in commands

SYNOPSIS
     See the built-in command description in the appropriate shell manual page.

DESCRIPTION
     Shell builtin commands are commands that can be executed within the running
     shell's process.  Note that, in the case of csh(1) builtin commands, the
     command is executed in a subshell if it occurs as any component of a pipeline
     except the last.

     If a command specified to the shell contains a slash ‘/’, the shell will not
     execute a builtin command, even if the last component of the specified command
     matches the name of a builtin command.  Thus, while specifying “echo” causes a
     builtin command to be executed under shells that support the echo builtin
     command, specifying “/bin/echo” or “./echo” does not.

     While some builtin commands may exist in more than one shell, their operation
     may be different under each shell which supports them.  Below is a table which
     lists shell builtin commands, the standard shells that support them and whether
     they exist as standalone utilities.

     Only builtin commands for the csh(1) and sh(1) shells are listed here.  Consult
     a shell's manual page for details on the operation of its builtin commands.
     Beware that the sh(1) manual page, at least, calls some of these commands
     “built-in commands” and some of them “reserved words”.  Users of other shells
     may need to consult an info(1) page or other sources of documentation.

     Commands marked “No**” under External do exist externally, but are implemented
     as scripts using a builtin command of the same name.

           Command           External        csh(1)       sh(1)
           !                 No              No           Yes
           %                 No              Yes          No
           .                 No              No           Yes
           :                 No              Yes          Yes
           @                 No              Yes          Yes
           [                 Yes             No           Yes
           {                 No              No           Yes
           }                 No              No           Yes
           alias             No**            Yes          Yes
           alloc             No              Yes          No
           bg                No**            Yes          Yes
           bind              No              No           Yes
           bindkey           No              Yes          No
           break             No              Yes          Yes
           breaksw           No              Yes          No
           builtin           No              No           Yes
           builtins          No              Yes          No
           case              No              Yes          Yes
           cd                No**            Yes          Yes
           chdir             No              Yes          Yes
           command           No**            No           Yes
           complete          No              Yes          No
           continue          No              Yes          Yes
           default           No              Yes          No
           dirs              No              Yes          No
           do                No              No           Yes
           done              No              No           Yes
           echo              Yes             Yes          Yes
           echotc            No              Yes          No
           elif              No              No           Yes
           else              No              Yes          Yes
           end               No              Yes          No
           endif             No              Yes          No
           endsw             No              Yes          No
           esac              No              No           Yes
           eval              No              Yes          Yes
           exec              No              Yes          Yes
           exit              No              Yes          Yes
           export            No              No           Yes
           false             Yes             No           Yes
           fc                No**            No           Yes
           fg                No**            Yes          Yes
           filetest          No              Yes          No
           fi                No              No           Yes
           for               No              No           Yes
           foreach           No              Yes          No
           getopts           No**            No           Yes
           glob              No              Yes          No
           goto              No              Yes          No
           hash              No**            No           Yes
           hashstat          No              Yes          No
           history           No              Yes          No
           hup               No              Yes          No
           if                No              Yes          Yes
           jobid             No              No           Yes
           jobs              No**            Yes          Yes
           kill              Yes             Yes          Yes
           limit             No              Yes          No
           local             No              No           Yes
           log               No              Yes          No
           login             Yes             Yes          No
           logout            No              Yes          No
           ls-F              No              Yes          No
           nice              Yes             Yes          No
           nohup             Yes             Yes          No
           notify            No              Yes          No
           onintr            No              Yes          No
           popd              No              Yes          No
           printenv          Yes             Yes          No
           printf            Yes             No           Yes
           pushd             No              Yes          No
           pwd               Yes             No           Yes
           read              No**            No           Yes
           readonly          No              No           Yes
           rehash            No              Yes          No
           repeat            No              Yes          No
           return            No              No           Yes
           sched             No              Yes          No
           set               No              Yes          Yes
           setenv            No              Yes          No
           settc             No              Yes          No
           setty             No              Yes          No
           setvar            No              No           Yes
           shift             No              Yes          Yes
           source            No              Yes          No
           stop              No              Yes          No
           suspend           No              Yes          No
           switch            No              Yes          No
           telltc            No              Yes          No
           test              Yes             No           Yes
           then              No              No           Yes
           time              Yes             Yes          No
           times             No              No           Yes
           trap              No              No           Yes
           true              Yes             No           Yes
           type              No**            No           Yes
           ulimit            No**            No           Yes
           umask             No**            Yes          Yes
           unalias           No**            Yes          Yes
           uncomplete        No              Yes          No
           unhash            No              Yes          No
           unlimit           No              Yes          No
           unset             No              Yes          Yes
           unsetenv          No              Yes          No
           until             No              No           Yes
           wait              No**            Yes          Yes
           where             No              Yes          No
           which             Yes             Yes          No
           while             No              Yes          Yes

SEE ALSO
     csh(1), dash(1), echo(1), false(1), info(1), kill(1), login(1), nice(1),
     nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1),
     which(1), zsh(1)

HISTORY
     The builtin manual page first appeared in FreeBSD 3.4.

AUTHORS
     This manual page was written by Sheldon Hearn <sheldonh@FreeBSD.org>.

macOS 13.1                        December 21, 2010                       macOS 13.1


refs

https://www.cnblogs.com/xgqfrms/p/17251644.html#5161214



©xgqfrms 2012-2021

www.cnblogs.com/xgqfrms 发布文章使用:只允许注册用户才可以访问!

原创文章,版权所有©️xgqfrms, 禁止转载 ?️,侵权必究⚠️!