【发布时间】:2018-12-05 08:54:13
【问题描述】:
我想增加当前的十进制变量, 所以我做了以下代码
#! /bin/bash
k=1.3
file=/home/script.sh
next_k=$(echo "$k + 0.1" | bc -l)
sed -i "s/$k/$next_k/g" "$file"
echo $k
正如您在此处看到的,我必须在第 3 行中指定文件,是否有解决方法来告诉它在当前文件中编辑和替换。而不是我将它指向文件。谢谢。
【问题讨论】:
我想增加当前的十进制变量, 所以我做了以下代码
#! /bin/bash
k=1.3
file=/home/script.sh
next_k=$(echo "$k + 0.1" | bc -l)
sed -i "s/$k/$next_k/g" "$file"
echo $k
正如您在此处看到的,我必须在第 3 行中指定文件,是否有解决方法来告诉它在当前文件中编辑和替换。而不是我将它指向文件。谢谢。
【问题讨论】:
我认为你在问如何引用自己的脚本名称,$0 持有,例如
#! /bin/bash
k=1.3
next_k=$(echo "$k + 0.1" | bc -l)
sed -i "s/$k/$next_k/g" "$0"
echo $k
您可以在Positional Parameters here 上阅读更多内容,特别是这一点:
($0) 扩展为 shell 或 shell 脚本的名称。这是在 shell 初始化时设置的。如果使用命令文件调用 Bash(请参阅 Shell 脚本),则 $0 设置为该文件的名称。如果 Bash 使用 -c 选项启动(请参阅 Invoking Bash),则 $0 设置为要执行的字符串之后的第一个参数(如果存在的话)。否则,它被设置为用于调用 Bash 的文件名,由参数 0 给出。
例如
$ cat test.sh
#! /bin/bash
k=1.3
next_k=$(echo "$k + 0.1" | bc -l)
sed -i "s/$k/$next_k/g" $0
echo $k
$ ./test.sh; ./test.sh ; ./test.sh
1.3
1.4
1.5
$ cat test.sh
#! /bin/bash
k=1.6
next_k=$(echo "$k + 0.1" | bc -l)
sed -i "s/$k/$next_k/g" $0
echo $k
【讨论】: