我想在执行命令时使用变量中定义的多个参数。让我用一个简单的例子来说明这个案例:
假设我想将文件从一个目标复制到另一个目标,并且我将通过变量提供cp的参数。当参数不包含任何空格时,它可以正常工作:
#!/bin/sh
ARGS="file1 file2"
cp $ARGS
strace显示以下预期解释:
execve("/bin/cp", ["cp", "file1", "file2"]
然而,当我使用带空格的参数时,我无法使其工作。我尝试将每个参数放在转义引号和许多其他内容中,但它被解释为单独的参数:
#!/bin/sh
ARGS="\"file1\" \"file2\""
cp $ARGS
结果不是两个参数,而是四个:
execve("/bin/cp", ["cp", "\"file", "1\"", "\"file", "2\""]
为了使事情进一步复杂化,我的最终目标是在提供的ARGS变量中使用变量替换,但是如何让它工作?请考虑以下事项:
FILENAME1="Picture 1.jpg"
FILENAME2="Picture 2.jpg"
ARGS="$FILENAME1 $FILENAME1"
cp $ARGS
它产生四个参数:
execve("/bin/cp", ["cp", "Picture", "1.jpg", "Picture", "1.jpg"]
答案 0 :(得分:0)
您无法可靠地使用单个参数来存储值列表;没有办法区分值 part 的空白和分隔值的空格。改为使用数组。
#!/bin/bash
filename1="Picture 1.jpg"
filename2="Picture 2.jpg"
args=( "$filename1" "$filename2" )
cp "${args[@]}"