我想要一个将当前工作目录带到变量的脚本。需要目录的部分就是这样
dir = pwd
。它只打印pwd
如何将当前工作目录转换为变量?#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
评论
相关:从内部获取Bash脚本的源目录这不是当前被标记为一个问题的重复项。至少应根据其标题(及其答案)对这两个问题进行比较。这个问题的答案已经被另一个人覆盖了,或者应该是不相关的。
@KennyEvitt实际上,我们关闭的主要原因之一就是因为在其他地方给出了答案。而且,实际上,这里的主要问题实际上是如何将命令的输出分配给变量,该变量由dupe覆盖。我还给出了针对此特定案例的答案,因此涵盖了所有基础。再打开一次将没有任何好处。
@terdon作为一种资源,对于整个Unix&Linux用户来说,这是一个有价值的问题,即使原始的问询者实际上只需要其他地方已经覆盖的答案,这也是一个有价值的问题。如果有的话,我认为应该对这个问题进行编辑以使其标题更加匹配,并且应该重新打开它,以免进行进一步的活动,但并不表示这个问题是“不好的”。
@KennyEvitt作为重复关闭绝不表示问题不好!这个问题将永远存在,一直得到回答。如果您真的想知道如何获取当前的工作目录,则可以在这里找到答案。如果您只想知道如何将命令的输出保存到变量中,则还可以通过单击伪对象的链接在此处找到答案。无论如何,这并不是我一个人真正应该做的事情,如果您强烈认为应该重新打开它,请在Unix&Linux Meta上进行讨论,以解决这些问题。