Bash
在 BASH 中用十進制數字命名文件
我想用創建它們的步驟來命名我的文件。步長是小數,據我所知,在 bash 中處理小數是很困難的。這是程式碼:
for i in $(seq 0.05 0.05 0.45) do . . . mv POSCAR slipped_112_111_$(( i*2 )).vasp done
我得到的錯誤如下:
./slip_loop.sh: line 3: 0.05: syntax error: invalid arithmetic operator (error token is ".05")
預期的文件名:
slipped_112_111_0.10.vasp slipped_112_111_0.20.vasp slipped_112_111_0.30.vasp . . .
請讓我知道是否有任何解決方法。謝謝。
bash
shell 不做浮點運算。這意味著您不能以您想要的方式使用浮點值。相反,您可以使用
for number in {1..9}; do # other code here printf -v name 'slipped_112_111_0.%d0.vasp' "$number" mv POSCAR "$name" done
該
printf -v
語句直接列印到變數name
中。格式字元串格式化數字,以便它出現在新文件名稱中的正確位置。這將執行以下
mv
命令:mv POSCAR slipped_112_111_0.10.vasp mv POSCAR slipped_112_111_0.20.vasp mv POSCAR slipped_112_111_0.30.vasp mv POSCAR slipped_112_111_0.40.vasp mv POSCAR slipped_112_111_0.50.vasp mv POSCAR slipped_112_111_0.60.vasp mv POSCAR slipped_112_111_0.70.vasp mv POSCAR slipped_112_111_0.80.vasp mv POSCAR slipped_112_111_0.90.vasp
如果您需要浮點數來做其他事情:
for number in {1..9}; do # other code here value=$( bc <<<"scale=2; $number/20" ) printf -v name 'slipped_112_111_0.%d0.vasp' "$number" mv POSCAR "$name" done