我开始学习如何在Linux中使用bash shell命令和脚本.
我想创建一个脚本来获取源文件,并创建一个选定数量的命名副本.
例如,我将源代码作为testFile,我选择了15个副本,因此它在同一位置创建了testFile1,2,3 ... 14,15.
为了尝试实现这一点,我尝试使用以下命令:
for LABEL in {$X..$Y}; do cp $INPUT $INPUT$LABEL; done
Run Code Online (Sandbox Code Playgroud)
但是,它不是创建从X到Y的文件,而是只添加一个文件(例如){1..5}而不是文件1,2,3,4和5
如何更改它以便正确使用变量作为循环的数字?
我试图更改脚本中的目录,以便使用相对路径执行一系列操作.该文件夹是一个名为的变量$input_path:
cd $(echo "$input_path")
Run Code Online (Sandbox Code Playgroud)
如果变量中有空格,例如"/ home/user/test directory/subfolder",脚本将返回错误:
./test_currently_broken.sh:86行:cd:"/ home/user/test:没有这样的文件或目录
我尝试了各种方法来逃避空间:
# escape spaces using backslashes, using sed
input_path=$(echo "$input_path" | sed 's/ /\\ /g')
Run Code Online (Sandbox Code Playgroud)
要么
# wrap input path with awk to add quotes
input_path=$(echo "$input_path" | awk '{print "\"" $0 "\""}')
Run Code Online (Sandbox Code Playgroud)
要么
# wrap in single quotes using sed
input_path=$(echo "$input_path" | sed -e "s/\(.*\)/'\1'/")#
Run Code Online (Sandbox Code Playgroud)
但没有人修复错误 - 它仍然无法更改目录.我已经确认它尝试更改的目录肯定存在,并且cding在此脚本之外工作.
有这种奇怪行为的解决方案cd吗?