Не используйте which (если вы не используете варианты csh
или tcsh
), он не работает. Вместо этого используйте команду -v node .
POSIX предлагает команду dirname , чтобы получить часть каталога в имени пути:
cd "$(dirname -- "$(command -v node)")"
или использовать переменную для хранения имени пути, не позволяя вам вызывать имя каталога
:
nodepath=$(command -v node)
cd "${nodepath%/*}"
Это не удается, так как printf
интерпретирует некоторые буквы с обратной косой чертой в своем первом аргументе как специальные.
Обычно при использовании printf
вы указываете
Это означает, что первый аргумент printf
может всегда быть строкой в одинарных кавычках.
В оболочке вы можете использовать просто %s
в качестве заполнителя практически для всего в строке форматирования, если только вам не нужны такие вещи, как заполнение слева/справа (, например. %20s
для использования 20 символов для строки с выравниванием по правому краю -или %-20s
для строки с выравниванием по левому краю -), определенное количество знаков после запятой в числах с плавающей запятой(%.3f
для трех знаков после запятой ), или нулем -заполнение целых чисел(%08d
для восьми цифр, нулем -заполнение )и т. д.
Например, чтобы напечатать строку, используйте %s
в строке форматирования:
v='\u\$'
printf 'PS1 will be set to "%s"\n' "$v" # or just: printf '%s\n' "$v"
PS1="$v"
или
PS1='\u\$'
printf 'PS1 was set to "%s"\n' "$PS1" # or just: printf '%s\n' "$PS1"
Будет выведено
PS1 will be set to "\u\$"
и
PS1 was set to "\u\$"
См. printf(1)
и/или printf(3)
в вашей системе(man 1 printf
иman 3 printf
).
Также обратите внимание, что PS1
не нужно экспортировать.