اقتبس باش المسار الحالي (PWD)
-
21-09-2019 - |
سؤال
لقد واجهت مشكلة مزعجة تحدث على PWD
متغير عندما يتضمن المسار الحالي مساحة. رمزتي تبدو مثل هذا إلى حد ما:
mycommand |sed -E '
s|mystuff|replacement| ;
s|'$(pwd)'|replacement| ;
'
هذا يعمل بشكل رائع ، ما لم يكن المسار الحالي يحتوي على حرف فضاء. إذا حدث، $(pwd)
يتم توسيعه إلى
'mypath/with space'بدلا من مجرد
mypath/with space
هذا يجعل تعبير SED يفسد (بسبب الاقتباسات الإضافية):
sed: 1: "s|mypath/with": unterminated substitute pattern
لقد لاحظت أنه لا يساعد في توسيع عدد الأشخاص ذوي الإعاقة مثل هذا: ${PWD//\'/}
.
أي أفكار حول كيفية حل هذا؟
المحلول
استبدل عروض أسعار واحدة من عروض أسعار مزدوجة واستبدل اقتباسات مع عوامل معالجة حول PWD:
mycommand | sed -E "
s|mystuff|replacement| ;
s|`pwd`|replacement| ;
"
عروض الأسعار المزدوجة تسمح بتوسيع المتغيرات والأوامر المربعة.
نصائح أخرى
ماذا يحدث إذا استبدلت
'$(pwd)'
مع
'"$(pwd)"'
سيبدو هكذا: ثم:
mycommand | sed -E '
s|mystuff|replacement| ;
s|'"$(pwd)"'|replacement| ;
'
لا تنتمي إلى StackOverflow