bash 在 $var 值上调用命令

bash 在 $var 值上调用命令

我是 Shell 脚本的新手,并按照这个快速指南进行了操作:

http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html

这很有帮助,但留下了很多关于使用变量的问题没有得到解答。我目前的挫败之处在于尝试使用一个在命令中存储路径的变量。

例如以下脚本:

#!/bin/bash

iTunesU_Source="~/Music/iTunes/iTunes\ Media/iTunes\ U/"
ls -al $iTunesU_Source

iTunesU_Source_symlink="~/Music/iTunes_U/"
ls -al $iTunesU_Source_symlink

ls -al ~/Music/iTunes/iTunes\ Media/iTunes\ U/

打印出:

ls: Media/iTunes\: No such file or directory
ls: U/: No such file or directory
ls: ~/Music/iTunes/iTunes\: No such file or directory
ls: ~/Music/iTunes_U/: No such file or directory
total 0
drwxr-xr-x   7 me  staff  238 Mar  8 10:06 .
drwxr-xr-x  11 me  staff  374 Mar  8 11:13 ..
drwxr-xr-x  27 me  staff  918 Mar  8 08:44 Game Theory - Audio
drwxr-xr-x   3 me  staff  102 Mar  8 10:03 Introduction to Algorithms
drwxr-xr-x  23 me  staff  782 Mar  8 12:17 Machine Learning
drwxr-xr-x   3 me  staff  102 Mar  8 10:06 Machine Learning-Stanford

如何让命令(ls/cd/etc...)像直接输入一样接受变量的值?

答案1

简单的解决方案:

iTunesU_Source="~/Music/iTunes/iTunes Media/iTunes U/"

这是为什么呢?在以下这一行中:

iTunesU_Source="~/Music/iTunes/iTunes\ Media/iTunes\ U/"

您将变量的值设置为带引号的字符串。在引号内,空格已保留。因此,变量的内容将是:

~/Music/iTunes/iTunes\ Media/iTunes\ U/

反斜杠只需要转义未加引号的字符串中的空格,因此你可以几乎写成如下形式:

iTunesU_Source=~/Music/iTunes/iTunes\ Media/iTunes\ U/

不同之处在于,在第一个命令中,~shell 不会将 扩展到您的主目录,而在第二个命令中,您的变量iTunesU_Source被分配/Users/username。因此,在这种情况下,您的变量将保留:

/Users/username/Music/iTunes/iTunes\ Media/iTunes\ U/

在此处了解有关引用的更多信息:

相关内容