使用 Bash 案例语句删除文件
Using Bash Case Statement to remove files
我目前有几个文件名为 file1.txt file2.txt file3.txt
我想创建一个案例语句来选择要删除的内容,我目前有:
files=" "
read number
case $number in
1) files=rm file1.txt ;;
2) files=rm file2.txt ;;
3) files=rm file3.txt ;;
*) files='this file does not exist' ;;
esac
echo $options
然而,每当我尝试 运行 时,它都会显示一个错误,例如 "file1.txt: command not found."
谁能解释一下我做错了什么?
files=rm file1.txt
...将 file1.txt
作为环境变量 files
设置为值 rm
的命令运行。
这通常适用于 任何 前面有 KEY=VALUE
对的简单命令:这些对被视为环境变量,仅在该命令的持续时间内设置.
也许你想要:
files=file1.txt
...或者:
files=( ) # create an empty array, not a scalar (string) variable.
read number
case $number in
1) files+=( file1.txt ) ;; # or simply: 1) rm file1.txt ;;
2) files+=( file2.txt ) ;; # or simply: 2) rm file2.txt ;;
3) files+=( file3.txt ) ;; # or simply: 3) rm file3.txt ;;
*) echo "This file does not exist" >&2 ; exit 1;;
esac
# ...if collecting filenames in an array, then...
echo "Removing files:" >&2
printf ' %q\n' "${files[@]}" >&2 # ...expand that array like so.
rm -f "${files[@]}" # likewise
要了解为什么像 cmd='rm file1.txt'
这样的东西——虽然语法正确——却很糟糕,并且容易出现错误,请参阅 BashFAQ #50。
我目前有几个文件名为 file1.txt file2.txt file3.txt
我想创建一个案例语句来选择要删除的内容,我目前有:
files=" "
read number
case $number in
1) files=rm file1.txt ;;
2) files=rm file2.txt ;;
3) files=rm file3.txt ;;
*) files='this file does not exist' ;;
esac
echo $options
然而,每当我尝试 运行 时,它都会显示一个错误,例如 "file1.txt: command not found."
谁能解释一下我做错了什么?
files=rm file1.txt
...将 file1.txt
作为环境变量 files
设置为值 rm
的命令运行。
这通常适用于 任何 前面有 KEY=VALUE
对的简单命令:这些对被视为环境变量,仅在该命令的持续时间内设置.
也许你想要:
files=file1.txt
...或者:
files=( ) # create an empty array, not a scalar (string) variable.
read number
case $number in
1) files+=( file1.txt ) ;; # or simply: 1) rm file1.txt ;;
2) files+=( file2.txt ) ;; # or simply: 2) rm file2.txt ;;
3) files+=( file3.txt ) ;; # or simply: 3) rm file3.txt ;;
*) echo "This file does not exist" >&2 ; exit 1;;
esac
# ...if collecting filenames in an array, then...
echo "Removing files:" >&2
printf ' %q\n' "${files[@]}" >&2 # ...expand that array like so.
rm -f "${files[@]}" # likewise
要了解为什么像 cmd='rm file1.txt'
这样的东西——虽然语法正确——却很糟糕,并且容易出现错误,请参阅 BashFAQ #50。