我遇到过一个shell脚本,其中包含一行代码,如下所示
Pfile=/params/tech1.dat:$Pfile;export Pfile
目的是创建并导出一个名为Pfile的变量,该变量包含值"/params/tech1.dat"但是':$Pfile'是做什么的呢?具体来说,冒号有什么作用呢?已经搜索了大量的Unix信息源和手册,但找不到一个例子来帮助解释上述内容。
Pfile
"/params/tech1.dat"
1mrurvl11#
冒号在许多列出路径的变量中起分隔符的作用。它只是一个按惯例为此目的选择的字符。在这里,这段代码给Pfile赋值的字符串是通过计算右边的位置得到的,它由常量字符串/params/tech1.dat:和变量$Pfile组成,如果写成Pfile="/params/tech1.dat:$Pfile";export Pfile,可能会更清楚。在您的特定示例中,/params/tech1.dat被添加到$Pfile的前面,因此,假设$Pfile的值为/other/path,则它将变为/params/tech1.dat:/other/path。在/params/tech1.dat中查找,然后在other/path中查找。常见示例:PATH, LD_LIBRARY_PATH, LIBRARY_PATH, CPATH, PYTHONPATH等等。如果$Pfile先前未设置或为空,则以尾随冒号结束:/params/tech1.dat:,根据您的程序,它可能被理解为工作目录(上面列出的示例就是这种情况)。请注意,在许多文件系统中,:是路径名中的有效字符,因此在某些路径包含:的情况下,可能应该对其进行转义。最后,请注意,在其他上下文中,:是一个不执行任何操作的Bash函数。
/params/tech1.dat:
$Pfile
Pfile="/params/tech1.dat:$Pfile";export Pfile
/params/tech1.dat
/other/path
/params/tech1.dat:/other/path
other/path
PATH, LD_LIBRARY_PATH, LIBRARY_PATH, CPATH, PYTHONPATH
:
h4cxqtbf2#
这将路径/params/tech1.dat前置到Pfile中可能已经存在的内容,因此Pfile可能已经是:
echo $Pfile /foo/bar:/blah/bleh
然后执行以下语句:
你会得到:
echo $Pfile /params/tech1.dat:/foo/bar:/blah/bleh
正如其他人提到的,冒号(:)通常用作路径或字段分隔符。
sh7euo9m3#
在本例中,您要将$Pfile的现有值追加到/params/tech1.dat。如果没有现有值,您将获得/params/tech1.dat:作为分配给$Pfile的值。:用作两个值之间的分隔符。通常,:在shell变量中用作目录的分隔符,例如PATH和LD_LIBRARY_PATH。不知道您是否有某种原因在变量中使用:。
PATH
LD_LIBRARY_PATH
3条答案
按热度按时间1mrurvl11#
冒号在许多列出路径的变量中起分隔符的作用。它只是一个按惯例为此目的选择的字符。
在这里,这段代码给
Pfile
赋值的字符串是通过计算右边的位置得到的,它由常量字符串/params/tech1.dat:
和变量$Pfile
组成,如果写成Pfile="/params/tech1.dat:$Pfile";export Pfile
,可能会更清楚。在您的特定示例中,
/params/tech1.dat
被添加到$Pfile
的前面,因此,假设$Pfile
的值为/other/path
,则它将变为/params/tech1.dat:/other/path
。在/params/tech1.dat
中查找,然后在other/path
中查找。常见示例:
PATH, LD_LIBRARY_PATH, LIBRARY_PATH, CPATH, PYTHONPATH
等等。如果
$Pfile
先前未设置或为空,则以尾随冒号结束:/params/tech1.dat:
,根据您的程序,它可能被理解为工作目录(上面列出的示例就是这种情况)。请注意,在许多文件系统中,
:
是路径名中的有效字符,因此在某些路径包含:
的情况下,可能应该对其进行转义。最后,请注意,在其他上下文中,
:
是一个不执行任何操作的Bash函数。h4cxqtbf2#
这将路径
/params/tech1.dat
前置到Pfile
中可能已经存在的内容,因此Pfile
可能已经是:然后执行以下语句:
你会得到:
正如其他人提到的,冒号(
:
)通常用作路径或字段分隔符。sh7euo9m3#
在本例中,您要将
$Pfile
的现有值追加到/params/tech1.dat
。如果没有现有值,您将获得/params/tech1.dat:
作为分配给$Pfile
的值。:
用作两个值之间的分隔符。通常,
:
在shell变量中用作目录的分隔符,例如PATH
和LD_LIBRARY_PATH
。不知道您是否有某种原因在变量中使用:
。