无法从单行命令中回显 bash 变量
Cannot echo bash variable from single line command
我尝试将 v5.4b
重新标记为 v5.7
的文件名如下:
v5.4b_lvl-1.e8974326
v5.4b_lvl-1.o8974326
v5.4b_lvl-1.pe8974326
v5.4b_lvl-1.po8974326
v5.4b_lvl-2.1.e8974303
v5.4b_lvl-2.1.o8974303
v5.4b_lvl-2.1.pe8974303
v5.4b_lvl-2.1.po8974303
v5.4b_lvl-2.2.e8974304
v5.4b_lvl-2.2.o8974304
v5.4b_lvl-2.2.pe8974304
v5.4b_lvl-2.2.po8974304
v5.4b_lvl-3.1.e8974305
v5.4b_lvl-3.1.o8974305
v5.4b_lvl-3.1.pe8974305
v5.4b_lvl-3.1.po8974305
v5.4b_lvl-4.1.e8974327
v5.4b_lvl-4.1.o8974327
v5.4b_lvl-4.1.pe8974327
v5.4b_lvl-4.1.po8974327
我不能做 mv v5.4b_* v5.7_*
因为它认为 v5.7_*
是一个目录所以我正在尝试 for-loop
但我无法让它工作
我正在尝试从这个 SO post How to set a variable to the output of a command in Bash? 中推荐的答案,但是得到了一堆空行。
我做错了什么?如何将 cut
的输出保存到 SUFFIX
以便我可以 mv $i v5.7_$SUFFIX
?
-bash-4.1$ for i in v5.4b*; do echo $i | SUFFIX=`cut -f2 -d'_'`; echo ${SUFFIX}; done
如果您重命名实用程序,则只需执行以下操作:
rename -n 's/v5.b/v5.7/' v5.4b*
PS: -n
为干-运行。您可以稍后将其删除以进行真正的重命名。
如果 rename
不可用,则使用:
for i in v5.4b*; do
echo mv "$i" "${i/v5.4b/v5.7}"
done
如果您对输出满意,请删除“echo”。
你 echo $i
放错地方了。该命令的输出需要通过管道传输到 cut
以便它读取任何内容,然后将结果分配给 SUFFIX
:
for i in v5.4b*
do
SUFFIX=`echo $i | cut -f2 -d'_'`
echo ${SUFFIX}
done
我尝试将 v5.4b
重新标记为 v5.7
的文件名如下:
v5.4b_lvl-1.e8974326
v5.4b_lvl-1.o8974326
v5.4b_lvl-1.pe8974326
v5.4b_lvl-1.po8974326
v5.4b_lvl-2.1.e8974303
v5.4b_lvl-2.1.o8974303
v5.4b_lvl-2.1.pe8974303
v5.4b_lvl-2.1.po8974303
v5.4b_lvl-2.2.e8974304
v5.4b_lvl-2.2.o8974304
v5.4b_lvl-2.2.pe8974304
v5.4b_lvl-2.2.po8974304
v5.4b_lvl-3.1.e8974305
v5.4b_lvl-3.1.o8974305
v5.4b_lvl-3.1.pe8974305
v5.4b_lvl-3.1.po8974305
v5.4b_lvl-4.1.e8974327
v5.4b_lvl-4.1.o8974327
v5.4b_lvl-4.1.pe8974327
v5.4b_lvl-4.1.po8974327
我不能做 mv v5.4b_* v5.7_*
因为它认为 v5.7_*
是一个目录所以我正在尝试 for-loop
但我无法让它工作
我正在尝试从这个 SO post How to set a variable to the output of a command in Bash? 中推荐的答案,但是得到了一堆空行。
我做错了什么?如何将 cut
的输出保存到 SUFFIX
以便我可以 mv $i v5.7_$SUFFIX
?
-bash-4.1$ for i in v5.4b*; do echo $i | SUFFIX=`cut -f2 -d'_'`; echo ${SUFFIX}; done
如果您重命名实用程序,则只需执行以下操作:
rename -n 's/v5.b/v5.7/' v5.4b*
PS: -n
为干-运行。您可以稍后将其删除以进行真正的重命名。
如果 rename
不可用,则使用:
for i in v5.4b*; do
echo mv "$i" "${i/v5.4b/v5.7}"
done
如果您对输出满意,请删除“echo”。
你 echo $i
放错地方了。该命令的输出需要通过管道传输到 cut
以便它读取任何内容,然后将结果分配给 SUFFIX
:
for i in v5.4b*
do
SUFFIX=`echo $i | cut -f2 -d'_'`
echo ${SUFFIX}
done