我正在编写一个试图将目录名插入pax命令的脚本,我不知道如何使语法正确。这就是我正在尝试的,但它似乎将$ DIRNAME视为正则表达式字符串的一部分。
DIRNAME=$(tar -tvf $1 | head -1 | sed -e 's:^.* \([^/]*\)/.*$:\1:')
pax -r -f $1 -s'/$DIRNAME\/upload\///'
谢谢!
答案 0 :(得分:4)
在调用pax时尝试使用双引号而不是单引号:
DIRNAME=$(tar -tvf $1 | head -1 | sed -e 's:^.* \([^/]*\)/.*$:\1:')
pax -r -f $1 -s"/$DIRNAME\/upload\///"
在几个shell中(例如bash和sh),$变量只有在双引号字符串中才会展开,而不是单引号字符串。
例如,以下脚本:
#!/bin/sh
DIRNAME=$(echo 'hello')
echo "Single quotes around regexp:"
echo 'hello world' | sed 's/$DIRNAME/hi/'
echo "Double quotes around regexp:"
echo 'hello world' | sed "s/$DIRNAME/hi/"
生成输出:
Single quotes around regexp:
hello world
Double quotes around regexp:
hi world