Linux 命令和单引号
Linux command and single quote
我认为单引号只是将每个字符的字面值保留在引号内,除了那些字符转义情况外,不会干扰命令结果。
例如,下面的两条命令返回相同的结果。
$ ls /home/testuser/tmp1
$ ls '/home/testuser/tmp1'
下面这条命令运行成功。
$ cp /home/testuser/tmp1/* /home/testuser/tmp2
但是下面的命令运行出错了。
$ cp '/home/testuser/tmp1/*' /home/testuser/tmp2
cp: cannot stat '/home/testuser/tmp1/*': No such file or directory
我做错了什么?
*
就是你所说的字符转义情况。由于您保留了 *
的字面值,因此它失去了 "all files" 的含义,并且 cp
而是尝试复制一个字面上名为 *
.
的文件
当你运行:
cp /home/testuser/tmp1/* /home/testuser/tmp2
shell会透明地重写成:
cp /home/testuser/tmp1/bar /home/testuser/tmp1/foo /home/testuser/tmp2
此过程称为 "pathname expansion" 或 "globbing"。当您引用 *
时,不会发生此重写。
我认为单引号只是将每个字符的字面值保留在引号内,除了那些字符转义情况外,不会干扰命令结果。
例如,下面的两条命令返回相同的结果。
$ ls /home/testuser/tmp1
$ ls '/home/testuser/tmp1'
下面这条命令运行成功。
$ cp /home/testuser/tmp1/* /home/testuser/tmp2
但是下面的命令运行出错了。
$ cp '/home/testuser/tmp1/*' /home/testuser/tmp2
cp: cannot stat '/home/testuser/tmp1/*': No such file or directory
我做错了什么?
*
就是你所说的字符转义情况。由于您保留了 *
的字面值,因此它失去了 "all files" 的含义,并且 cp
而是尝试复制一个字面上名为 *
.
当你运行:
cp /home/testuser/tmp1/* /home/testuser/tmp2
shell会透明地重写成:
cp /home/testuser/tmp1/bar /home/testuser/tmp1/foo /home/testuser/tmp2
此过程称为 "pathname expansion" 或 "globbing"。当您引用 *
时,不会发生此重写。