#!/usr/bin/env bash
if [ "$outDir" == "" ]
then
echo "$PWD" ,"We are here ", $outDir ," with "
"$outDir" = "$PWD"
echo "Yes"
fi
终端输出:
/home/Documents/folderName ,We are here , , with
./pipeline.sh: line 28: : command not found
Yes
我无法将当前目录分配给 $outDir。
我尝试了"outDir" = "$PWD"
和$outDir="$PWD"
,"$outDir"=$PWD
但没有任何效果。然而,echo $PWD
工作得很好。
为什么不呢工作?
答案1
看起来您只是在尝试分配$PWD
未设置或空值的$outDir
事件,是吗?$outDir
我认为以下是等效的:
printf 'We are here: "%s"\n $outDir = "%s"\n' \
"$PWD" "${outDir:=$PWD}"
如果$outDir
已经被赋值,那么,对于的第二个参数,打印它的值,否则它同时赋值toprintf
的值并打印它。$PWD
$outDir
当然,虽然这里的${outDir:=$PWD}
变量调用会自我更正空值或未设置的值,但它不会尝试验证它是实际上是一个目录。您上面的支票也是如此。因此可能比其中任何一个更好的是:
cd -- "${outDir:=$PWD}" || exit; cd - >/dev/null
cd
不仅会验证用户的选择是否$outDir
正确,如果用户无法访问,它还会打印错误。如果测试成功,cd -
只会将您带回到测试之前的位置。cd
重定向>/dev/null
只是为了防止cd -
打印$PWD
,否则使用时它会执行此操作。
然而,如果用户没有指定$outDir
,那么它的值将像以前一样被指定为 的值$PWD
,这意味着测试成功并且cd $PWD
连续两个命令-
被 替换$OLDPWD
- 这里也是$PWD
。
答案2
outDir="$PWD"
echo
此外:对我来说,仅使用一个参数似乎更有用:
echo "${PWD} ,We are here , ${outDir} , with "
该if
测试可以替换为
if [ -z "$outDir" ]
答案3
第一个 echo 命令后面有一个换行符,因此"$outDir" = "$PWD"
被视为命令。
您可以附加"$outDir" = "$PWD"
到第一个回显行,也可以在第一个回显行的末尾添加行继续字符。
#!/usr/bin/env bash
if [ "$outDir" == "" ]
then
echo "$PWD" ,"We are here ", $outDir ," with ", \
"$outDir" = "$PWD"
echo "Yes"
fi
或者
#!/usr/bin/env bash
if [ "$outDir" == "" ]
then
echo "$PWD" ,"We are here ", $outDir ," with ", "$outDir" = "$PWD"
echo "Yes"
fi
会给你你想要的输出:
[sri@localhost ~]$ ./crap.bsh
./crap.bsh
/home/sri ,We are here , , with , = /home/sri
Yes
这是我的第一个答案的正文。 漠视。
它确实有效(在我的盒子上),我对此感到震惊。首先是脚本:
#!/usr/bin/env bash
if [ "$outDir" == "" ]
then
echo "$PWD", "We are here", $outDir, "$outDir" = "$PWD"
echo "yes"
fi
这是输出
./test.bsh
/home/chris, We are here, , = /home/chris
yes
我认为这与你的 bash 版本有关。这是我的:
bash --version
GNU bash, version 4.2.45(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
我编写 BASH 脚本已经有 20 年了,我没想到它会起作用。该脚本必须使用较新版本的 BASH 支持的语法编写。
我个人会用一个字符串来实现这一点。我以前从未见过有人做过你做的事情(我认为这很酷):
echo "$PWD, We are here, $outDir, $outDir = $PWD"
另请记住,您可以通过使用单引号来避免变量扩展:
echo "$PWD"
echo '$PWD'
echo "$(pwd)"
输出:
/home/chris
$PWD
/home/chris