Bash字符串操作在shell中的工作方式与.sh文件不同?

时间:2014-01-20 04:41:30

标签: node.js bash shell install environment-variables

我有一个脚本来获取和设置我的.deb系统上的最新NodeJS:

echo "Downloading, building and installing latest NodeJS"
sudo apt-get install python g++ make checkinstall
mkdir /tmp/node_build && cd $_
curl -O "http://nodejs.org/dist/node-latest.tar.gz"
tar xf node-latest.tar.gz && cd node-v*
NODE_VERSION="${PWD#*v}"
#NODE_VERSION=python -c "print '$PWD'.split('-')[-1][1:]"
echo "Installing NodeJS" $NODE_VERSION

./configure
sudo checkinstall -y --install=no --pkgversion NODE_VERSION
sudo dpkg -i node_$NODE_VERSION

不幸的是它不起作用;作为echo行输出:

  

安装NodeJS i8 / dir-where-runnning-script-from / node-v0.10.24

它确实可以在shell中运行:

$ cd /tmp/node_build/node-v0.10.24 && echo "${PWD#*v}"
0.10.24

2 个答案:

答案 0 :(得分:1)

路径中还有另一个“v”,就像在“i8 /”之前一样吗? #*v将通过变量中的 first “v”删除;我很确定你希望##*v通过变量中的 last “v”删除。 (从技术上讲,#删除最短的匹配前缀,##删除最长的匹配)。因此:

NODE_VERSION="${PWD##*v}"

应该工作。

答案 1 :(得分:0)

试试这个

sudo checkinstall -y --install=no --pkgversion "${NODE_VERSION##*v}"