如何在Bash变量中保存带空格的可执行路径及附带参数
问题原因
你遇到的报错是因为把带空格的路径、后续子命令都存到同一个普通字符串变量导致的Bash错误分词:路径中的空格转义符\在双引号包裹的字符串中不会生效,Bash展开变量时会把路径从空格处切开,把/Applications/YubiKey\识别为要执行的文件,自然找不到对应路径。
最优解决方案
用Bash数组存储可执行路径和固定参数,可以完美处理路径自带空格、参数分隔的双重需求,修改后的test.sh写法如下:
#!/bin/bash # 数组每个元素对应一个独立项:第一项是带空格的可执行文件路径,第二项是固定子命令openpgp run=("/Applications/YubiKey Manager.app/Contents/MacOS/ykman" "openpgp") # 执行时用"${run[@]}"展开,保证每个元素原样传递,不会被错误拆分 "${run[@]}" info
这种写法不管路径里有多少个空格、后续要加多少层子命令/参数,都能正常识别,不会出现分词错误。
简化写法
如果不需要复用ykman openpgp这个固定前缀,也可以单独定义可执行文件路径变量,执行时用引号包裹路径即可:
#!/bin/bash YKMAN_PATH="/Applications/YubiKey Manager.app/Contents/MacOS/ykman" "$YKMAN_PATH" openpgp info
内容的提问来源于stack exchange,提问作者sunknudsen
相关产品推荐
相关产品推荐

