我的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可能存在也可能不存在.
我写过这个剧本:
#!/bin/bash
file="~/Desktop/test.txt"
echo "TESTING" > $file
Run Code Online (Sandbox Code Playgroud)
该脚本不起作用; 它给了我这个错误:
./tester.sh: line 4: ~/Desktop/test.txt: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我编写了一个脚本,必须在用户定义的目录中找到一些文件,这些文件可能包含波形符(因此,它可能有user_defined_directory='~/foo'
).构造看起来像
found_files=$(find "$user_defined_directory" -type f … )
Run Code Online (Sandbox Code Playgroud)
我使用引号来覆盖该路径中的可能空格,但根据手册页,波形扩展在引号中不起作用.我知道:
运营商可能会进行这种扩展,但我无法弄清楚如何在这里使用它.
'user-defined-directory'取自用户$ HOME目录中的另一个配置文件.它不是作为参数传递给我的脚本,而是从我编写的脚本中的另一个配置中解析它.