Назад | Перейти на главную страницу

$ * vs $ @ позиционная переменная в Linux

В чем разница между позиционной переменной $ * и $ @ в linux. Я где-то читал, используя $ *, это угроза безопасности. Это правда.

В основном они одинаковы, за исключением случаев, когда переменная заключена в двойные кавычки. затем $* расширяется до одного слова и $@ расширяется на отдельные слова. Я не вижу никаких оснований утверждать, что $* представляет собой угрозу безопасности.

На странице руководства bash:

   *      Expands  to  the positional parameters, starting from one.  When
          the expansion occurs within double quotes, it expands to a  sin-
          gle word with the value of each parameter separated by the first
          character of the IFS special variable.  That is, "$*" is equiva-
          lent to "$1c$2c...", where c is the first character of the value
          of the IFS variable.  If IFS is unset, the parameters are  sepa-
          rated  by  spaces.   If  IFS  is null, the parameters are joined
          without intervening separators.
   @      Expands to the positional parameters, starting from  one.   When
          the  expansion  occurs  within  double  quotes,  each  parameter
          expands to a separate word.  That is, "$@" is equivalent to "$1"
          "$2"  ...   If the double-quoted expansion occurs within a word,
          the expansion of the first parameter is joined with  the  begin-
          ning  part  of  the original word, and the expansion of the last
          parameter is joined with the last part  of  the  original  word.
          When  there  are no positional parameters, "$@" and $@ expand to
          nothing (i.e., they are removed).