我需要将带有非拉丁符号的$ NAUTILUS_SCRIPT_CURRENT_URI转换为PATH
例如
/home/shara/%D0%A0%D0%B0%D0%B1%D0%BE%D1%87%D0%B8%D0%B9<br>%20%D1%81%D1%82%D0%BE%D0%BB/testdir
至
/home/shara/Рабочий стол/testdir
怎么做?
答案 0 :(得分:0)
假设中间的<br>
只是一个意外,就像这样:
in="/home/shara/%D0%A0%D0%B0%D0%B1%D0%BE%D1%87%D0%B8%D0%B9%20%D1%81%D1%82%D0%BE%D0%BB/testdir"
eval out=\$\'${in//%/\\x}\'
注意,这不会对您的语言环境进行更正,它只会用匹配的原始字节替换%XX转义符。如有必要,您可以使用iconv
。另外,如果原始%被转义为%%
而不是%25
(在您的问题中没有提及),或者如果输入可能包含反斜杠,那么您也需要考虑这些。
答案 1 :(得分:0)
我用这个
做到了selected_files=($NAUTILUS_SCRIPT_SELECTED_FILE_PATHS)
for dir in "${selected_files[@]}" ; do
base=$(readlink -f "$(dirname "$dir")")
done
答案 2 :(得分:0)
以下内容改编自unix stackexchange(在这种情况下我们不需要将'+'替换为''),将适用于任何POSIX shell,而不仅仅是bash,(例如破折号):
current_nautilus_path=$(echo "$NAUTILUS_SCRIPT_CURRENT_URI" | sed -e 's/%/\\x/g' -e 's_^file://__' | xargs -0 printf "%b")
或者,如果bashisms没问题,但您不想调用任何外部程序,稍微修改Jester's/Dennis Williamson's solution将为您提供没有“file:”前缀的路径:
percent_decoded_uri=$(printf "${NAUTILUS_SCRIPT_CURRENT_URI//%/\\x}")
current_nautilus_path=${percent_decoded_uri#file://}
最后,如果从脚本中调用python不会打扰你,我强烈推荐Glutanimate建议的solution from askubuntu,因为它免费提供对任意gvfs协议(例如sftp)的支持:
current_nautilus_path=$(python -c 'import gio,sys; print(gio.File(sys.argv[1]).get_path())' "$NAUTILUS_SCRIPT_CURRENT_URI")