我想要一个将当前工作目录带到变量的脚本。需要目录的部分就是这样dir = pwd。它只打印pwd如何将当前工作目录转换为变量?

评论

相关:从内部获取Bash脚本的源目录

这不是当前被标记为一个问题的重复项。至少应根据其标题(及其答案)对这两个问题进行比较。这个问题的答案已经被另一个人覆盖了,或者应该是不相关的。

@KennyEvitt实际上,我们关闭的主要原因之一就是因为在其他地方给出了答案。而且,实际上,这里的主要问题实际上是如何将命令的输出分配给变量,该变量由dupe覆盖。我还给出了针对此特定案例的答案,因此涵盖了所有基础。再打开一次将没有任何好处。

@terdon作为一种资源,对于整个Unix&Linux用户来说,这是一个有价值的问题,即使原始的问询者实际上只需要其他地方已经覆盖的答案,这也是一个有价值的问题。如果有的话,我认为应该对这个问题进行编辑以使其标题更加匹配,并且应该重新打开它,以免进行进一步的活动,但并不表示这个问题是“不好的”。

@KennyEvitt作为重复关闭绝不表示问题不好!这个问题将永远存在,一直得到回答。如果您真的想知道如何获取当前的工作目录,则可以在这里找到答案。如果您只想知道如何将命令的输出保存到变量中,则还可以通过单击伪对象的链接在此处找到答案。无论如何,这并不是我一个人真正应该做的事情,如果您强烈认为应该重新打开它,请在Unix&Linux Meta上进行讨论,以解决这些问题。

#1 楼

不需要这样做,它已经在变量中:

$ echo $PWD
/home/terdon


PWD变量由POSIX定义,并且可以在所有POSIX兼容的外壳程序上运行:


PWD

由shell和cd实用程序设置。在外壳中,值
应从环境中按以下方式初始化。如果
PWD的值在执行时被传递到环境中的Shell,则
值是当前工作目录的绝对路径名,该路径名
不超过{PATH_MAX}个字节包括终止的空字节,
,并且该值不包含任何点或点-点的组成部分,
,则外壳程序应将PWD设置为来自环境的值。
否则,如果PWD的值在执行时会在
环境中传递到外壳,该值是当前工作目录
组件是点或点-点,则未指定
shell是将PWD设置为环境中的值,还是将PWD设置为pwd -P将输出的
路径名。否则,sh实用程序
将PWD设置为pwd -P将输出的路径名。在PWD设置为环境值的情况下,该值可以包含引用符号链接类型文件的组件。在
将PWD设置为pwd -P将输出的路径名的情况下,如果
当前工作目录或该目录任何父目录上的
权限不足,确定路径名
是什么,PWD的值未指定。可以忽略对该变量的分配
。如果应用程序设置或未设置PWD的值,则未指定cd和pwd实用程序的行为。



对于更一般的答案,将命令输出保存到变量中的方法是将命令括在$()` `(反引号)中:

var=$(command)




var=`command`


在这两者中,首选$(),因为它更容易构建像command0 $(command1 $(command2 $(command3)))这样的复杂命令。

#2 楼

dir=$(pwd)

比backticks方法更便携,更可取。

使用$()可以嵌套命令

例如:mech_pwd=$(pwd; echo in $(hostname))

评论


实际上,如果有的话,backtics较易携带,因为它们早于$()格式。可以想象,仍然有一些机器运行的shell不支持新的$()表示法。虽然两者都是由POSIX定义的,但今天首选使用$(),因为它是一种更简洁的语法,并且可以比反引号更简单地嵌套($(command1 $(command2)))。

– terdon♦
15年3月4日在18:55

#3 楼

您可以使用环境变量$PWD,也可以编写类似以下内容的代码:

dir=`pwd`


#4 楼

您需要使用命令替换将pwd命令的输出保存到变量。命令替换可以使用反引号或美元字符。像这样:

$ mkdir "/tmp/new dir"
$ cd "/tmp/new dir"
$ CWD="$(pwd)"
$ echo $CWD
/tmp/new dir
$ cd ~
$ echo $CWD
/tmp/new dir
$ pwd
/home/ja


#5 楼

当前工作目录的值可以不同。如果您使用符号链接来获取当前目录,则pwd的结果将不同于/ usr / bin / pwd。
由于您正在使用bash,因此我将使用:

dir=$(/usr/bin/pwd)


或按注释:

dir=$(pwd -P)


因为我不喜欢反引号,因为它们不能嵌套。

评论


dir = $(pwd -P)也可以。

–罗伯特·雅各布斯
15年3月4日在19:43