我想要一个将当前工作目录传递给变量的脚本。需要目录的部分是这样的dir = pwd
。它只是打印pwd
如何将当前工作目录放入变量中?
答案1
没必要这么做,已经这样了在一个变量:
$ echo "$PWD"
/home/terdon
变量PWD
是由 POSIX 定义并且适用于所有 POSIX 兼容的 shell:
残疾人士
由 shell 和 cd 实用程序设置。在 shell 中,该值应从环境中初始化,如下所示。如果 PWD 的值在执行时传递给环境中的 shell,则该值是当前工作目录的绝对路径名,不超过 {PATH_MAX} 个字节(包括终止空字节),并且该值不包含任何点或点-点的组件,则 shell 应将 PWD 设置为环境中的值。否则,如果执行时环境中向 shell 传递了 PWD 的值,该值是当前工作目录的绝对路径名,并且该值不包含任何点或点-点组成部分,则它未指定 shell 是将 PWD 设置为环境中的值还是将 PWD 设置为 pwd -P 输出的路径名。否则,sh 实用程序将 PWD 设置为 pwd -P 输出的路径名。如果 PWD 设置为环境中的值,则该值可以包含引用符号链接类型文件的组件。如果 PWD 设置为 pwd -P 输出的路径名,如果当前工作目录或该目录的任何父目录没有足够的权限来确定该路径名,则 PWD 的值为未指定。对该变量的赋值可能会被忽略。如果应用程序设置或取消设置 PWD 的值,则 cd 和 pwd 实用程序的行为是未指定的。
对于更一般的答案,将命令的输出保存在变量中的方法是将命令括在$()
or ` `
(反引号)中:
var=$(command)
或者
var=`command`
在两者中,$()
首选 ,因为它更容易构建复杂的命令,例如:
command0 "$(command1 "$(command2 "$(command3)")")"
其反引号等效项如下所示:
command0 "`command1 \"\`command2 \\\"\\\`command3\\\`\\\"\`\"`"
答案2
dir=$(pwd)
这比反引号方法更便携并且更受欢迎。
使用$()
允许您嵌套命令
例如:mech_pwd=$(pwd; echo in $(hostname))
答案3
您可以使用环境变量$PWD
,或者编写如下内容:
dir=`pwd`
答案4
当前工作目录的值可以不同。如果您使用符号链接来获取当前目录,pwd 将给出与 /usr/bin/pwd 不同的结果。由于您使用的是 bash,我会使用:
dir=$(/usr/bin/pwd)
或根据评论:
dir=$(pwd -P)
因为我不喜欢反引号,因为它们不能嵌套。