我正在编写一个简单的脚本,提示用户输入信息并将其保存为变量,以便在另一个命令中作为参数传递。变量之一存储可能包含空格的路径。使用read
命令的-r
标签,路径被检索为“原始”输入,忽略反斜杠转义字符。
例如:
read -p "Enter checksum algorithm number (1, 224, 256, 384, 512, 512224, 412256): " -a shaa
read -p "Enter a file path: " -re shapath
问题是我无法弄清楚如何在不读取转义字符的情况下使用这些参数运行命令。根据@heemayl 解决
然后,我需要将命令的输出或返回值存储为另一个变量。
例如:
foo=$(shasum -a "$shaa" "$shapath")
但是,当我echo $foo
没有得到 的预期输出shasum -a "$shaa" "$shapath"
,而是得到shasum: /.../checksum.dmg
我能够通过使用eval
和管道将其工作var
,如下所示:
eval shasum -a $sha $shapath > val
我已经读过我应该不惜eval
一切代价避免,它不允许我继续推进剧本。
答案1
使用引号:
shasum -a "$sha" "$shapath"
无论值中是否有空格,变量都将扩展为单个参数。