cp命令使用两个变量

S. *_*RAN 0 bash shell

我想使用两个变量的cp命令,但不起作用

#!/bin/sh

PATH="/home/smvm/Dropbox/ssd-tech/SoftSwitch"


SRCPATH=${PATH}/lib/SIPLib/*.a
DESTPATH=${PATH}/include

cp "$SRCPATH" "$DESTPATH"
Run Code Online (Sandbox Code Playgroud)

发生以下错误

copyPaste.sh: 9: copyPaste.sh: cp: not found
Run Code Online (Sandbox Code Playgroud)

Leo*_*eon 5

PATH是一个用于定位可执行文件的特殊变量.PATH使用另一个变量(最好是小写变量)更改脚本,您的问题将得到解决:

#!/bin/sh

dir="/home/smvm/Dropbox/ssd-tech/SoftSwitch"


srcfiles=${dir}/lib/SIPLib/*.a
destdir=${dir}/include

cp $srcfiles "$destdir"
Run Code Online (Sandbox Code Playgroud)

作为一般建议 - 不要在bash脚本中使用ALL UPPERCASE VARIABLES,以避免与保留环境变量的潜在冲突.

  • 请注意,将glob放在变量中并不是一种好习惯.因为它需要的参数仍然不加引号,`srcfiles`不能含有包含空格的路径,例如,'srcfiles ="/家/我/我的图书馆/ SIPLib/*.一个"`.使用该模式来填充数组.`srcfiles =("$ dir"/ lib/SIPLib/*.a)`,然后`cp"$ {srcfiles [@]}""$ destdir"`. (2认同)