我的bash脚本中有一个变量,其值如下所示:
~/a/b/c
Run Code Online (Sandbox Code Playgroud)
请注意,它是未扩展的波形符号.当我对这个变量执行ls -lt(称之为$ VAR)时,我没有这样的目录.我想让bash解释/扩展这个变量而不执行它.换句话说,我希望bash运行eval但不运行evaluate命令.在bash中这可能吗?
我是如何在不扩展的情况下将其传递到我的脚本中的?我用双引号传递了围绕它的论点.
试试这个命令看看我的意思:
ls -lt "~"
Run Code Online (Sandbox Code Playgroud)
这正是我所处的情况.我想要扩展代字号.换句话说,我应该用什么来代替魔法来使这两个命令相同:
ls -lt ~/abc/def/ghi
Run Code Online (Sandbox Code Playgroud)
和
ls -lt $(magic "~/abc/def/ghi")
Run Code Online (Sandbox Code Playgroud)
请注意〜/ abc/def/ghi可能存在也可能不存在.
我需要检查用户主目录中的文件是否存在,因此请使用文件检查:
if ( -e "~/foo.txt" ) {
print "yes, it exists!" ;
}
Run Code Online (Sandbox Code Playgroud)
即使在用户的主目录下有一个名为foo.txt的文件,Perl总是抱怨没有这样的文件或目录.当我用/ home/jimmy替换"〜"时(让我们说用户是jimmy)然后Perl做出正确的判决.
你能解释为什么"〜"不能在Perl中工作并告诉我Perl找到用户主目录的方式是什么?
说我有一个文件夹,名为Foo
位于/home/user/
(我/home/user
也被代表~
).
我想要一个变量
a="~/Foo"
然后呢
cd $a
我明白了
-bash: cd: ~/Foo: No such file or directory
但是,如果我这样做,cd ~/Foo
它工作正常.有关如何使其工作的任何线索?
如何在Swift中使用波浪号扩展路径String?我有一个类似的字符串"~/Desktop"
,我想在NSFileManager
方法中使用此路径,这需要将波浪号扩展为"/Users/<myuser>/Desktop"
.
(这有明显的问题说明问题并不存在,这应该是很容易玛丽萨.有些相似但不令人满意的问题是不能使路径在斯威夫特的文件,简单的方法来读取使用雨燕?本地文件,波浪线的基础在Objective-C的路径)
我有一个Dockerfile,其中包含以下行:
COPY *.zip ~user1
Run Code Online (Sandbox Code Playgroud)
用户user1
已经存在并且具有主目录(即/home/user1
).当然,目标是将zip文件复制到该用户的主目录中,但上述结果是将zip文件复制到/~user1
图像中字面上的文件中.
以下工作按预期工作:
COPY *.zip /home/user1
Run Code Online (Sandbox Code Playgroud)
这是Docker中的错误还是有与我不知道的代字号扩展有关的限制?
在Mac上使用Docker 1.13.0.
我的module.modulemap
文件看起来像这样:
module CompanyInternalSDK {
header "~/Company/CompanyInternalSDK.framework/Headers/CompanyInternalSDK.h"
export *
}
Run Code Online (Sandbox Code Playgroud)
但是,我收到此错误:
/Users/username/Path/To/Project/CompanyInternalSDK/module.modulemap:2:12: error: header '~/Company/CompanyInternalSDK.framework/Headers/CompanyInternalSDK.h' not found
header "~/Company/CompanyInternalSDK.framework/Headers/CompanyInternalSDK.h"
^
Run Code Online (Sandbox Code Playgroud)
当我使用没有波浪号的绝对路径时,它编译得很好,但由于这将像这样分发给所有开发人员,我想使用波浪号。有什么办法可以使这项工作正常进行吗?
我还尝试在header
字符串中使用环境变量,但这也不起作用:
module CompanyInternalSDK {
header "${HOME}/Company/CompanyInternalSDK.framework/Headers/CompanyInternalSDK.h"
export *
}
Run Code Online (Sandbox Code Playgroud)
/Users/username/Path/To/Project/CompanyInternalSDK/module.modulemap:2:12: error: header '${HOME}/Company/CompanyInternalSDK.framework/Headers/CompanyInternalSDK.h' not found
header "${HOME}/Company/CompanyInternalSDK.framework/Headers/CompanyInternalSDK.h"
^
Run Code Online (Sandbox Code Playgroud) module environment-variables tilde-expansion swift module-map
可能重复:
如何在Perl中找到用户的主目录?
我正在运行Ubuntu.
每当我传递Perl脚本时,以~
(例如~/Documents/file.txt
)它开始的路径都找不到它.我必须通过规范路径(例如/home/dave/Documents/file.txt
).
这是为什么?
我可以让Perl识别~
路径吗?
UPDATE
所有建议的解决方案都包括更改脚本中的代码.我想要一个不会对脚本本身进行任何更改的解决方案(因为并非所有这些都是我的).也许是Bash的工作方式?
问题的更新版本发布在超级用户.
我发现波浪扩展不适用于以下情况:
$ set -x
$ ./print_arg.pl destdir=~/test
+ ./print_arg.pl 'destdir=/root/test'
destdir=/root/test
$ ./print_arg.pl dest-dir=~/test
+ ./print_arg.pl 'dest-dir=~/test'
dest-dir=~/test
$ ./print_arg.pl -destdir=~/test
+ ./print_arg.pl '-destdir=~/test'
dest-dir=~/test
Run Code Online (Sandbox Code Playgroud)
print_arg.pl的内容是
#!/usr/bin/perl
print $ARGV[0],"\n";
Run Code Online (Sandbox Code Playgroud)
根据Shell的处理顺序,壳牌将在"波浪扩张"之前分词.而且我注意到单词分裂实际上是不同的.结果不同的原因是什么?
波浪号表达式在我的 RStudio 上不起作用!我正在使用 Windows 10 操作系统。
更新:仔细查看后(感谢 Dason)似乎“~”指向“用户/文档/”而不是“用户/”。有什么解决办法吗?
有什么帮助吗?
~
当在 scss 导入路径中使用波形符 ( ) 时,它会node_modules/
在 Angular 中扩展为。有没有任何官方文档说这是 Angular 或 webpack 的一个功能?
到目前为止,我在这个问题上发现的只是一些以前的 Angular 版本的错误报告,称它已损坏,还有一条评论说这是一个不应该依赖的实现细节。
我希望执行ng eject
并检查配置,但该命令不再可用。
如果有人可以向我指出一些官方文档,说明它是~
的路径的简写node_modules/
,或者指定该替换的源代码(例如配置文件),我将不胜感激。:)
基本上,我想弄清楚为什么它会起作用以及如何起作用。