请考虑以下代码段:
$ SOMEVAR=AAA
$ echo zzz $SOMEVAR zzz
zzz AAA zzz
Run Code Online (Sandbox Code Playgroud)
在这里,我设置$SOMEVAR到AAA第一线-当我赞同它的第二行,我得到的AAA内容符合市场预期.
但是,如果我尝试在同一命令行上指定变量echo:
$ SOMEVAR=BBB echo zzz $SOMEVAR zzz
zzz AAA zzz
Run Code Online (Sandbox Code Playgroud)
......我没有BBB按照我的预期得到 - 我得到旧值(AAA).
这是事情应该如何?如果是这样,那么为什么你可以指定变量LD_PRELOAD=/... program args ...并让它工作?我错过了什么?
嗨,我想知道为什么我收到此错误.我有这个名为mock的目录,里面有另外3个目录.我试图使用下面的代码将模拟目录中的所有项目复制到projweek目录中.
cp /mock/* ~/projweek
Run Code Online (Sandbox Code Playgroud)
但是我得到了这个错误
cp: cannot stat ‘mock/*’: No such file or directory
Run Code Online (Sandbox Code Playgroud)
关于为什么那样的任何想法?
我下载的很多文件都有文件名中的垃圾/垃圾邮件,例如
[ www.crap.com ] file.name.ext
www.crap.com - file.name.ext
我想出了两种处理它们的方法,但它们看起来都很笨重:
参数扩展:
if [[ ${base_name} != ${base_name//\[+([^\]])\]} ]]
then
mv -v "${dir_name}/${base_name}" "${dir_name}/${base_name//\[+([^\]])\]}" &&
base_name="${base_name//\[+([^\]])\]}"
fi
if [[ ${base_name} != ${base_name//www.*.com - /} ]]
then
mv -v "${dir_name}/${base_name}" "${dir_name}/${base_name//www.*.com - /}" &&
base_name="${base_name//www.*.com - /}"
fi
# more of these type of statements; one for each type of frequently-encountered pattern
Run Code Online (Sandbox Code Playgroud)
然后使用echo/sed:
tmp=`echo "${base_name}" | sed -e 's/\[[^][]*\]//g' | sed -e 's/\s-\s//g'`
mv "${base_name}" "{tmp}"
Run Code Online (Sandbox Code Playgroud)
我觉得参数扩展是两者中最差的,但我喜欢它,因为我能够保留分配给文件的相同变量,以便在重命名后进行进一步处理(上面的代码用于为每个文件调用的脚本中文件下载完成后).
所以无论如何我希望有一个更好/更清洁的方式来做上述事情,比我自己更有知识的人可以告诉我,最好是以一种方式让我轻松地将旧/原始变量重新分配给新的/重命名的文件.
谢谢