Unix shell脚本-冒号的用途

cfh9epnr  于 2023-01-21  发布在  Shell
关注(0)|答案(3)|浏览(203)

我遇到过一个shell脚本,其中包含一行代码,如下所示

Pfile=/params/tech1.dat:$Pfile;export Pfile

目的是创建并导出一个名为Pfile的变量,该变量包含值"/params/tech1.dat"
但是':$Pfile'是做什么的呢?具体来说,冒号有什么作用呢?
已经搜索了大量的Unix信息源和手册,但找不到一个例子来帮助解释上述内容。

1mrurvl1

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函数。

h4cxqtbf

h4cxqtbf2#

这将路径/params/tech1.dat前置到Pfile中可能已经存在的内容,因此Pfile可能已经是:

echo $Pfile
/foo/bar:/blah/bleh

然后执行以下语句:

Pfile=/params/tech1.dat:$Pfile;export Pfile

你会得到:

echo $Pfile
/params/tech1.dat:/foo/bar:/blah/bleh

正如其他人提到的,冒号(:)通常用作路径或字段分隔符。

sh7euo9m

sh7euo9m3#

在本例中,您要将$Pfile的现有值追加到/params/tech1.dat。如果没有现有值,您将获得/params/tech1.dat:作为分配给$Pfile的值。:用作两个值之间的分隔符。
通常,:在shell变量中用作目录的分隔符,例如PATHLD_LIBRARY_PATH。不知道您是否有某种原因在变量中使用:

相关问题