TesselatingHeckler 的答案是正确的。
从手册页sh(1)
:
set [-/+abCEefIimnpTuVvx] [-/+o longname] [-c string] [-- arg ...]
The set command performs three different functions:
With no arguments, it lists the values of all shell variables.
If options are given, either in short form or using the long
``-/+o longname'' form, it sets or clears the specified options
as described in the section called Argument List Processing.
如果您想要一个用于设置环境变量的命令,该命令将是setvar
,您可以按如下方式使用它:
setvar dir `pwd`
然而,这是不常见的用法。更常见的同义词是:
dir=`pwd`
或者
dir=$(pwd)
请注意,等号周围没有空格。
另请注意,如果您选择使用该setvar
命令,最好将您的值放在引号内。以下会产生错误:
$ mkdir foo\ bar
$ cd foo\ bar
$ setvar dir `pwd`
相反,您需要:
$ setvar dir "`pwd`"
或者更清楚:
$ dir="$(pwd)"
请注意,您可能还需要export
您的变量。export 命令用于标记一个变量,该变量应该传递给正在运行的 shell 生成的子 shell。一个例子应该更清楚地说明这一点:
$ foo="bar"
$ sh -c 'echo $foo'
$ export foo
$ sh -c 'echo $foo'
bar
我要补充的另一件事是,它很常见,也不需要date
像您在脚本中那样使用,因为该命令能够产生自己的格式化输出。尝试这个:
$ date '+The date today is %+'
对于日期选项,您可以man date
和man strftime
。
最后提示:使用 时echo
,请将内容放在引号中。您将产生更少混乱和更合理的输出。笔记:
$ foo="`printf 'a\nb\n'`"
$ echo $foo
a b
$ echo "$foo"
a
b
希望这可以帮助!